[darcs-devel] patch for lazy partial repos
David Roundy
droundy at darcy.physics.oregonstate.edu
Wed Apr 4 17:24:27 PDT 2007
For some reason the darcs.net server is down, so I'm sending
these patches blind (as I'll be travelling soon). My apologies
if they don't work. I decided to implement "lazy" downloading
of patches, which is to say, a framework for downloading patches
only when they are required. In a sense, this is a fixed version
of the partial repositories concept, but you might prefer true
partial repositories, if you want to be sure not to accidentally
end up downloading the entire thing. This only works with hashed
inventory repos.
Once again, testers for hashed inventory repos would be greatly
appreciated.
David
New patches:
[add framework for lazily fetching hash files.
David Roundy <droundy at darcs.net>**20070403232223
This patch doesn't yet actually have any effect, but prepares
the way for changes to allow a variety of --partial that won't
have the downside of sometimes causing darcs to fail later,
since one can always download the patch files from the original
server.
]
<
> {
hunk ./src/Darcs/Arguments.lhs 61
match_several_or_range, happy_forwarding,
match_several_or_last,
set_default,
+ lazy, verify_hash,
fancy_move_add, pristine_tree,
set_scripts_executable,
sibling, flagsToSiblings, relink, relink_pristine,
hunk ./src/Darcs/Arguments.lhs 694
"use a hashed inventory",
DarcsNoArgOption [] ["old-fashioned-inventory"] UseOldFashionedInventory
"use old fashioned inventory"]
+verify_hash :: DarcsOption
+verify_hash = DarcsNoArgOption [] ["verify-hashes"] VerifyHash
+ "verify validity of patch files"
\end{code}
\begin{code}
hunk ./src/Darcs/Arguments.lhs 755
partial = DarcsMultipleChoiceOption
[DarcsNoArgOption [] ["partial"] Partial
"get partial repository using checkpoint",
+ DarcsNoArgOption [] ["lazy"] Lazy
+ "get files as needed",
DarcsNoArgOption [] ["complete"] Complete
"get a complete copy of the repository"]
partial_check = DarcsMultipleChoiceOption
hunk ./src/Darcs/Arguments.lhs 766
"check patches since latest checkpoint"]
tokens = DarcsArgOption [] ["token-chars"] Toks "\"[CHARS]\""
"define token to contain these characters"
+lazy :: DarcsOption
+lazy = DarcsMultipleChoiceOption
+ [DarcsNoArgOption [] ["no-lazy"] NoLazy
+ "download patch files immediately",
+ DarcsNoArgOption [] ["lazy"] Lazy
+ "download patch files as needed"]
\end{code}
\begin{code}
hunk ./src/Darcs/Commands/Optimize.lhs 34
TagName, CheckPoint,
Relink, RelinkPristine ),
tagname, verbose, checkpoint, reorder_patches,
- uncompress_nocompress,
+ uncompress_nocompress, verify_hash,
relink, relink_pristine, sibling,
flagsToSiblings, modernize_patches,
working_repo_dir, umask_option,
hunk ./src/Darcs/Commands/Optimize.lhs 97
reorder_patches,
sibling, relink,
relink_pristine,
+ verify_hash,
umask_option]}
\end{code}
\begin{code}
hunk ./src/Darcs/Flags.lhs 60
| DiffCmd String
| ExternalMerge String | Summary | NoSummary
| Unified | Reverse
- | CheckPoint | Partial | Complete
+ | CheckPoint | Partial | Complete | Lazy | NoLazy
| FixFilePath String | DiffFlags String
| XMLOutput
| ForceReplace
hunk ./src/Darcs/Flags.lhs 71
| FancyMoveAdd | NoFancyMoveAdd
| Disable | SetScriptsExecutable | DontSetScriptsExecutable
| UseHashedInventory | UseOldFashionedInventory
+ | VerifyHash
| PristinePlain | PristineNone
| Sibling String | Relink | RelinkPristine
| Files | NoFiles | Directories | NoDirectories
hunk ./src/Darcs/Repository/HashedRepo.lhs 28
add_to_tentative_inventory, remove_from_tentative_inventory,
read_repo, read_repo_lazily,
write_inventory,
- writeHashFile
+ writeHashFile, copyHashFile, readHashFile
) where
import System.IO.Unsafe ( unsafeInterleaveIO )
hunk ./src/Darcs/Repository/HashedRepo.lhs 35
import System.IO ( stderr, hPutStrLn )
import System.Directory ( doesDirectoryExist )
import Data.List ( delete )
-import Control.Monad ( unless )
+import Control.Monad ( unless, when )
import Workaround ( renameFile, getCurrentDirectory, createDirectoryIfMissing )
hunk ./src/Darcs/Repository/HashedRepo.lhs 38
-import Darcs.Flags ( DarcsFlag )
+import Darcs.Flags ( DarcsFlag( Lazy, VerifyHash ) )
import Darcs.Patch.Set ( PatchSet )
import Darcs.Repository.DarcsRepo ( absolute_dir )
import Darcs.Hopefully ( Hopefully, actuallyHashed, extractHash, unavailable )
hunk ./src/Darcs/Repository/HashedRepo.lhs 47
import Darcs.Patch.Depends ( commute_to_end, slightly_optimize_patchset )
import Darcs.Patch.Info ( PatchInfo, showPatchInfo, readPatchInfo )
import FastPackedString ( PackedString, readFilePS, writeFilePS, gzReadFilePS, nullPS,
- tailPS, lengthPS,
+ tailPS, lengthPS, takePS, dropPS,
packString, breakOnPS, unpackPS, dropWhitePS )
import Printer ( Doc, hcat, ($$), text )
import SHA1 ( sha1PS )
hunk ./src/Darcs/Repository/HashedRepo.lhs 51
-import Darcs.External ( copyLocal, gzFetchFilePS, fetchFilePS, Cachable( Cachable, Uncachable ) )
+import Darcs.External ( copyLocal, copyFileOrUrl, gzFetchFilePS,
+ fetchFilePS, Cachable( Cachable, Uncachable ) )
import Darcs.Lock ( writeBinFile, withTemp, writeDocBinFile, appendBinFile, appendDocBinFile )
import Darcs.Utils ( withCurrentDirectory )
#include "impossible.h"
hunk ./src/Darcs/Repository/HashedRepo.lhs 75
remove_from_tentative_inventory :: [DarcsFlag] -> [Patch] -> IO ()
remove_from_tentative_inventory opts to_remove =
- do allpatches <- read_tentative_repo "."
+ do allpatches <- read_tentative_repo opts "."
let (_, skipped) = commute_to_end to_remove allpatches
hunk ./src/Darcs/Repository/HashedRepo.lhs 77
- okay <- simple_remove_from_tentative_inventory
+ okay <- simple_remove_from_tentative_inventory opts
(map (fromJust . patch2patchinfo) $ to_remove ++ skipped)
unless okay $ bug "bug in remove_from_tentative_inventory"
add_to_tentative_inventory opts `mapM_` skipped
hunk ./src/Darcs/Repository/HashedRepo.lhs 82
-simple_remove_from_tentative_inventory :: [PatchInfo] -> IO Bool
-simple_remove_from_tentative_inventory pis = do
- inv <- read_tentative_repo "."
+simple_remove_from_tentative_inventory :: [DarcsFlag] -> [PatchInfo] -> IO Bool
+simple_remove_from_tentative_inventory opts pis = do
+ inv <- read_tentative_repo opts "."
case cut_inv pis inv of
Nothing -> return False
Just inv' -> do write_tentative_inventory inv'
hunk ./src/Darcs/Repository/HashedRepo.lhs 100
renameFile f hash
return hash
-read_repo :: String -> IO PatchSet
-read_repo d = do
+copyHashFile :: [DarcsFlag] -> String -> String -> String -> IO ()
+copyHashFile opts url dir hash
+ | Lazy `elem` opts = writeFile dirhash $ "url: " ++ url
+ | otherwise = copyFileOrUrl urlhash dirhash Cachable
+ where urlhash = url ++ "/" ++ hash
+ dirhash = dir ++ "/" ++ hash
+
+readHashFile :: [DarcsFlag] -> String -> String -> IO PackedString
+readHashFile opts dir hash =
+ do hf <- gzFetchFilePS (dir ++ "/" ++ hash) Cachable
+ if takePS 5 hf == packString "url: "
+ then readHashFile opts (unpackPS $ dropPS 5 hf) hash
+ else do when (VerifyHash `elem` opts && sha1PS hf /= hash) $
+ fail $ "Hash failed hash: "++ dir ++ "/" ++ hash
+ return hf
+
+read_repo :: [DarcsFlag] -> String -> IO PatchSet
+read_repo opts d = do
realdir <- absolute_dir d
hunk ./src/Darcs/Repository/HashedRepo.lhs 119
- read_repo_private False realdir "hashed_inventory" `catch`
+ read_repo_private opts False realdir "hashed_inventory" `catch`
(\e -> do hPutStrLn stderr ("Invalid repository: " ++ realdir)
ioError e)
hunk ./src/Darcs/Repository/HashedRepo.lhs 123
-read_tentative_repo :: String -> IO PatchSet
-read_tentative_repo d = do
+read_tentative_repo :: [DarcsFlag] -> String -> IO PatchSet
+read_tentative_repo opts d = do
realdir <- absolute_dir d
hunk ./src/Darcs/Repository/HashedRepo.lhs 126
- read_repo_private False realdir "tentative_hashed_inventory" `catch`
+ read_repo_private opts False realdir "tentative_hashed_inventory" `catch`
(\e -> do hPutStrLn stderr ("Invalid repository: " ++ realdir)
ioError e)
hunk ./src/Darcs/Repository/HashedRepo.lhs 130
-read_repo_lazily :: String -> IO PatchSet
-read_repo_lazily d = do
+read_repo_lazily :: [DarcsFlag] -> String -> IO PatchSet
+read_repo_lazily opts d = do
realdir <- absolute_dir d
hunk ./src/Darcs/Repository/HashedRepo.lhs 133
- read_repo_private True realdir "hashed_inventory" `catch`
+ read_repo_private opts True realdir "hashed_inventory" `catch`
(\e -> do hPutStrLn stderr ("Invalid repository: " ++ realdir)
ioError e)
hunk ./src/Darcs/Repository/HashedRepo.lhs 137
-read_repo_private :: Bool -> FilePath -> FilePath -> IO PatchSet
-read_repo_private am_lazy d iname =
- do inventories <- read_inventory_private d iname
+read_repo_private :: [DarcsFlag] -> Bool -> FilePath -> FilePath -> IO PatchSet
+read_repo_private opts am_lazy d iname =
+ do inventories <- read_inventory_private opts (d++"/_darcs") iname
isdir <- doesDirectoryExist d
let parse (_,h) = let fn = d ++ "/_darcs/patches/" ++ h
in if isdir then parse_local h fn
hunk ./src/Darcs/Repository/HashedRepo.lhs 207
hash <- withCurrentDirectory idir $ writeHashFile inventorycontents
return $ Just hash
-
pihash :: (PatchInfo,String) -> Doc
pihash (pinf,hash) = showPatchInfo pinf $$ text ("hash: " ++ hash ++ "\n")
hunk ./src/Darcs/Repository/HashedRepo.lhs 210
-read_inventory_private :: String -> String -> IO [[(PatchInfo, String)]]
-read_inventory_private d iname = do
- i <- fetchFilePS (d++"/_darcs/"++iname) Uncachable
+read_inventory_private :: [DarcsFlag] -> String -> String
+ -> IO [[(PatchInfo, String)]]
+read_inventory_private opts d iname = do
+ i <- fetchFilePS (d++"/"++iname) Uncachable
(rest,str) <- case breakOnPS '\n' i of
(swt,pistr) | swt == packString "Starting with inventory:" ->
case breakOnPS '\n' $ tailPS pistr of
hunk ./src/Darcs/Repository/HashedRepo.lhs 218
(h,thisinv) | lengthPS h == 40 ->
- do r <- unsafeInterleaveIO $ read_inventory_private d $
- "inventories/" ++ unpackPS h
+ do r <- unsafeInterleaveIO $ read_inventories
+ opts (d++"/inventories") (unpackPS h)
return (r,thisinv)
_ -> fail $ "Bad hash in " ++ d ++ "/_darcs/" ++ iname
_ -> return ([],i)
hunk ./src/Darcs/Repository/HashedRepo.lhs 223
+ pis <- return $ reverse $ read_patch_ids str
+ return $ pis : rest
+
+read_inventories :: [DarcsFlag] -> String -> String -> IO [[(PatchInfo, String)]]
+read_inventories opts d ihash = do
+ i <- readHashFile opts d ihash
+ (rest,str) <- case breakOnPS '\n' i of
+ (swt,pistr) | swt == packString "Starting with inventory:" ->
+ case breakOnPS '\n' $ tailPS pistr of
+ (h,thisinv) | lengthPS h == 40 ->
+ do r <- unsafeInterleaveIO $
+ read_inventories opts d (unpackPS h)
+ return (r,thisinv)
+ _ -> fail $ "Bad hash in " ++ d ++ "/" ++ ihash
+ _ -> return ([],i)
pis <- return $ reverse $ read_patch_ids str
return $ pis : rest
hunk ./src/Darcs/Repository.lhs 302
opts = modopts oldopts
read_repo :: Repository -> IO PatchSet
-read_repo (Repo r _ rf (DarcsRepository _))
- | format_has HashedInventory rf = HashedRepo.read_repo r
+read_repo (Repo r opts rf (DarcsRepository _))
+ | format_has HashedInventory rf = HashedRepo.read_repo opts r
| otherwise = DarcsRepo.read_repo r
read_repo (Repo r _ _ GitRepository) = GitRepo.read_repo r
hunk ./src/Darcs/Repository.lhs 311
-- both exist and be valid files. This is obviously unsafe in the senses
-- that "isJust" doesn't tell us if a patch is actually parsable.
unsafe_fast_read_repo :: Repository -> IO PatchSet
-unsafe_fast_read_repo (Repo r _ rf (DarcsRepository _))
- | format_has HashedInventory rf = HashedRepo.read_repo_lazily r
+unsafe_fast_read_repo (Repo r opts rf (DarcsRepository _))
+ | format_has HashedInventory rf = HashedRepo.read_repo_lazily opts r
| otherwise = DarcsRepo.lazily_read_repo r
unsafe_fast_read_repo (Repo r _ _ GitRepository) = GitRepo.read_repo r
}
[fix bug Eric pointed out (which has also now bitten me).
David Roundy <droundy at darcs.net>**20070404233317
This was a bug in the Checkpoint repo, where we assumed we were
looking at the current working directory, incorrectly.
]
<
> {
hunk ./src/Darcs/Repository/Checkpoint.lhs 98
get_check_internal :: [DarcsFlag] -> String -> IO (Maybe Patch)
get_check_internal opts r = do
- pis <- (map fst . concat) `fmap` (identifyRepository opts "." >>= read_repo)
+ pis <- (map fst . concat) `fmap` (identifyRepository opts r >>= read_repo)
pistr <- fetchFilePS (r++"/_darcs/checkpoints/inventory") Uncachable
`catchall` (return $ packString "")
case filter (`elem` pis) $ reverse $ read_patch_ids pistr of
}
[add support for partial and lazy downloading of hashed repos.
David Roundy <droundy at darcs.net>**20070405000616]
<
> {
move ./src/Darcs/Repository.lhs ./src/Darcs/Repository/Internal.lhs
addfile ./src/Darcs/Repository.lhs
hunk ./GNUmakefile 74
MODULES_REPOSITORY:=\
Checkpoint.lhs \
HashedRepo.lhs \
- Format.lhs Motd.lhs Prefs.lhs \
+ Format.lhs Internal.lhs \
+ Motd.lhs Prefs.lhs \
Pristine.lhs \
DarcsRepo.lhs \
hunk ./src/Darcs/Commands/Check.lhs 31
import Darcs.Commands ( DarcsCommand(..), nodefaults )
import Darcs.Arguments ( DarcsFlag( Quiet, Verbose, NoTest, LeaveTestDir ),
partial_check, any_verbosity, notest,
+ verify_hash,
leave_test_dir, working_repo_dir,
)
import Darcs.Hopefully ( actually )
hunk ./src/Darcs/Commands/Check.lhs 91
command_get_arg_possibilities = return [],
command_argdefaults = nodefaults,
command_darcsoptions = [partial_check,
+ verify_hash,
any_verbosity,notest,
leave_test_dir,
working_repo_dir
hunk ./src/Darcs/Commands/Get.lhs 144
else write_inventory "." [[]]
if format_has HashedInventory rf || format_has HashedInventory rfsource
- then do identifyRepository opts repodir >>= copyRepository opts
+ then do identifyRepository opts repodir >>= copyRepository
when (SetScriptsExecutable `elem` opts) $
do putVerbose $ text "Making scripts executable"
myname <- getCurrentDirectory
hunk ./src/Darcs/Commands/Optimize.lhs 34
TagName, CheckPoint,
Relink, RelinkPristine ),
tagname, verbose, checkpoint, reorder_patches,
- uncompress_nocompress, verify_hash,
+ uncompress_nocompress,
relink, relink_pristine, sibling,
flagsToSiblings, modernize_patches,
working_repo_dir, umask_option,
hunk ./src/Darcs/Commands/Optimize.lhs 97
reorder_patches,
sibling, relink,
relink_pristine,
- verify_hash,
umask_option]}
\end{code}
\begin{code}
hunk ./src/Darcs/Repository/Checkpoint.lhs 45
readPatch,
gzWritePatch
)
-import Darcs.Repository ( Repository, identifyRepository, read_repo, slurp_recorded,
- absolute_dir, withRecorded )
+import Darcs.Repository.Internal
+ ( Repository, identifyRepository, read_repo, slurp_recorded,
+ absolute_dir, withRecorded )
import Darcs.Repository.DarcsRepo ( apply_patches )
import Darcs.Patch.Info ( PatchInfo, make_filename, readPatchInfo,
showPatchInfo
hunk ./src/Darcs/Repository/HashedRepo.lhs 27
module Darcs.Repository.HashedRepo ( revert_tentative_changes, finalize_tentative_changes,
add_to_tentative_inventory, remove_from_tentative_inventory,
read_repo, read_repo_lazily,
- write_inventory,
+ write_inventory, copy_repo,
writeHashFile, copyHashFile, readHashFile
) where
hunk ./src/Darcs/Repository/HashedRepo.lhs 33
import System.IO.Unsafe ( unsafeInterleaveIO )
import System.IO ( stderr, hPutStrLn )
-import System.Directory ( doesDirectoryExist )
import Data.List ( delete )
import Control.Monad ( unless, when )
hunk ./src/Darcs/Repository/HashedRepo.lhs 37
import Workaround ( renameFile, getCurrentDirectory, createDirectoryIfMissing )
-import Darcs.Flags ( DarcsFlag( Lazy, VerifyHash ) )
+import Darcs.Flags ( DarcsFlag( Verbose, Lazy, Partial, VerifyHash ) )
import Darcs.Patch.Set ( PatchSet )
import Darcs.Repository.DarcsRepo ( absolute_dir )
import Darcs.Hopefully ( Hopefully, actuallyHashed, extractHash, unavailable )
hunk ./src/Darcs/Repository/HashedRepo.lhs 41
-import Darcs.Patch ( Patch, showPatch, patch2patchinfo, readPatch, readPatchLazily,
- gzReadPatchFileLazily )
+import Darcs.Patch ( Patch, showPatch, patch2patchinfo, readPatch,
+ readPatchLazily )
import Darcs.Patch.Depends ( commute_to_end, slightly_optimize_patchset )
import Darcs.Patch.Info ( PatchInfo, showPatchInfo, readPatchInfo )
hunk ./src/Darcs/Repository/HashedRepo.lhs 45
-import FastPackedString ( PackedString, readFilePS, writeFilePS, gzReadFilePS, nullPS,
+import FastPackedString ( PackedString, readFilePS, writeFilePS, nullPS,
tailPS, lengthPS, takePS, dropPS,
hunk ./src/Darcs/Repository/HashedRepo.lhs 47
+ gzWriteFilePS,
packString, breakOnPS, unpackPS, dropWhitePS )
import Printer ( Doc, hcat, ($$), text )
import SHA1 ( sha1PS )
hunk ./src/Darcs/Repository/HashedRepo.lhs 102
copyHashFile :: [DarcsFlag] -> String -> String -> String -> IO ()
copyHashFile opts url dir hash
- | Lazy `elem` opts = writeFile dirhash $ "url: " ++ url
+ | Lazy `elem` opts || Partial `elem` opts =
+ writeFile dirhash $ "url: " ++ url
| otherwise = copyFileOrUrl urlhash dirhash Cachable
where urlhash = url ++ "/" ++ hash
dirhash = dir ++ "/" ++ hash
hunk ./src/Darcs/Repository/HashedRepo.lhs 112
readHashFile opts dir hash =
do hf <- gzFetchFilePS (dir ++ "/" ++ hash) Cachable
if takePS 5 hf == packString "url: "
- then readHashFile opts (unpackPS $ dropPS 5 hf) hash
+ then do ps <- readHashFile opts (unpackPS $ dropPS 5 hf) hash
+ gzWriteFilePS (dir ++ "/" ++ hash) ps
+ return ps
else do when (VerifyHash `elem` opts && sha1PS hf /= hash) $
fail $ "Hash failed hash: "++ dir ++ "/" ++ hash
return hf
hunk ./src/Darcs/Repository/HashedRepo.lhs 143
read_repo_private :: [DarcsFlag] -> Bool -> FilePath -> FilePath -> IO PatchSet
read_repo_private opts am_lazy d iname =
do inventories <- read_inventory_private opts (d++"/_darcs") iname
- isdir <- doesDirectoryExist d
- let parse (_,h) = let fn = d ++ "/_darcs/patches/" ++ h
- in if isdir then parse_local h fn
- else parse_remote h fn
+ let dn = d ++ "/_darcs/patches"
+ parse (_,h) = do ps <- readHashFile opts dn h
+ return $
+ if am_lazy
+ then actuallyHashed h $ fst $ readPatchLazily ps
+ else hopefullyNoParseError h (dn++"/"++h) $
+ fst `fmap` readPatch ps
read_patches parse `mapM` inventories
hunk ./src/Darcs/Repository/HashedRepo.lhs 151
- where -- parse_remote should really download to a temporary file removed
- -- at exit
- parse_remote h fn = do ps <- gzFetchFilePS fn Cachable
- return $
- if am_lazy
- then actuallyHashed h $ fst $ readPatchLazily ps
- else hopefullyNoParseError h fn $
- fst `fmap` readPatch ps
- parse_local h fn = if am_lazy
- then actuallyHashed h `fmap` gzReadPatchFileLazily fn
- else (hopefullyNoParseError h fn . (fmap fst . readPatch))
- `fmap` gzReadFilePS fn
- hopefullyNoParseError :: String -> String -> Maybe Patch -> Hopefully Patch
+ where hopefullyNoParseError :: String -> String -> Maybe Patch -> Hopefully Patch
hopefullyNoParseError h _ (Just x) = actuallyHashed h x
hopefullyNoParseError _ s Nothing = unavailable $ "Couldn't parse file "++s
read_patches :: ((PatchInfo,String) -> IO (Hopefully Patch))
hunk ./src/Darcs/Repository/HashedRepo.lhs 169
write_inventory :: PatchSet -> IO ()
write_inventory = write_either_inventory "hashed_inventory"
+copy_repo :: [DarcsFlag] -> String -> String -> IO ()
+copy_repo opts inr outr = withCurrentDirectory outr $ do
+ read_repo opts inr >>= write_inventory
+ inventories <- read_inventory_private opts (outr++"/_darcs") "hashed_inventory"
+ putVerbose "Lazily copying hashed patch files..."
+ mapM_ (copyHashFile opts inp outp . snd) $ concat inventories
+ where putVerbose = when (Verbose `elem` opts) . putStrLn
+ inp = inr ++ "/_darcs/patches"
+ outp = outr ++ "/_darcs/patches"
+
write_either_inventory :: String -> PatchSet -> IO ()
write_either_inventory iname x =
do createDirectoryIfMissing False "_darcs/inventories"
hunk ./src/Darcs/Repository/Internal.lhs 20
% Boston, MA 02110-1301, USA.
\begin{code}
-module Darcs.Repository ( Repository, maybeIdentifyRepository, identifyRepository,
+module Darcs.Repository.Internal ( Repository(..), RepoType(..),
+ maybeIdentifyRepository, identifyRepository,
findRepository, amInRepository, amNotInRepository,
slurp_pending,
slurp_recorded, slurp_recorded_and_unrecorded,
hunk ./src/Darcs/Repository/Internal.lhs 37
#endif
tentativelyAddPatch, tentativelyRemovePatches, tentativelyAddToPending,
finalizeRepositoryChanges,
- copyRepository,
unrevertUrl,
applyToPristine, patchSetToPatches,
createPristineDirectoryTree,
hunk ./src/Darcs/Repository/Internal.lhs 42
optimizeInventory,
getMarkedupFile,
- PatchSet
+ PatchSet,
+ add_to_tentative_pristine,
) where
import Prelude hiding ( catch )
import Darcs.External ( fetchFilePS, Cachable( Cachable ) )
hunk ./src/Darcs/Repository/Internal.lhs 75
import qualified Darcs.Repository.DarcsRepo as DarcsRepo
import qualified Darcs.Repository.GitRepo as GitRepo
import Darcs.Flags ( DarcsFlag(AnyOrder, Boring, LookForAdds, Verbose,
- WorkDir, UMask) )
+ WorkDir, UMask) )
import Darcs.Patch ( Patch, flatten, join_patches, reorder_and_coalesce,
commute, patch2patchinfo, null_patch, readPatch,
writePatch, flatten_to_primitives, invert, is_similar,
hunk ./src/Darcs/Repository/Internal.lhs 377
GitRepo.set_tentative_tree token
return patch'
-tentativelyAddPatchFromOutside :: Repository -> [DarcsFlag] -> Patch -> IO Patch
-tentativelyAddPatchFromOutside (Repo dir _ rf (DarcsRepository _)) opts patch =
- withCurrentDirectory dir $
- do fp <- decideHashedOrNormal rf $ HvsO {
- hashed = HashedRepo.add_to_tentative_inventory opts patch,
- old = DarcsRepo.add_to_tentative_inventory opts patch
- }
- add_to_tentative_pristine fp
- gzReadPatchFileLazily fp
-tentativelyAddPatchFromOutside (Repo dir _ _ GitRepository) _ patch =
- withCurrentDirectory dir $ do (patch', token) <- GitRepo.writePatch dir patch
- GitRepo.set_tentative_tree token
- return patch'
-
tentativelyAddToPending :: Repository -> [DarcsFlag] -> Patch -> IO ()
tentativelyAddToPending (Repo dir _ _ rt) _ patch =
withCurrentDirectory dir $ do
hunk ./src/Darcs/Repository/Internal.lhs 550
\end{code}
\begin{code}
-copyRepository :: [DarcsFlag] -> Repository -> IO ()
-copyRepository opts fromrepository =
- withRepoLock opts $ \torepository ->
- do patches <- read_repo fromrepository
- mapM_ (tentativelyAddPatchFromOutside torepository opts) $
- map hopefully $ reverse $ concat patches
- finalizeRepositoryChanges torepository
- identifyPristine >>= createPristineWorking torepository
- where createPristineWorking :: Repository -> Pristine -> IO ()
- createPristineWorking repository pris =
- do done <- easyCreatePristineDirectoryTree pris "."
- unless done $ do
- patches <- unsafe_fast_read_repo repository
- apply_patches [] False noPut noPut $ reverse $ concat patches
- noPut _ = return ()
-
optimizeInventory :: Repository -> IO ()
optimizeInventory repository@(Repo r _ rf (DarcsRepository _)) =
do ps <- read_repo repository
hunk ./src/Darcs/Repository.lhs 1
+% Copyright (C) 2002-2004 David Roundy
+% Copyright (C) 2005 Juliusz Chroboczek
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2, or (at your option)
+% any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; see the file COPYING. If not, write to
+% the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+% Boston, MA 02110-1301, USA.
+
+\begin{code}
+module Darcs.Repository ( Repository, maybeIdentifyRepository, identifyRepository,
+ findRepository, amInRepository, amNotInRepository,
+ slurp_pending,
+ slurp_recorded, slurp_recorded_and_unrecorded,
+ withRecorded,
+ get_unrecorded, get_unrecorded_unsorted, get_unrecorded_no_look_for_adds,
+ read_repo, sync_repo, absolute_dir,
+ unsafe_fast_read_repo,
+ prefsUrl,
+ read_pending, add_to_pending,
+ withRepoLock,
+#ifdef HAVEWX
+ takeRepoGuiLock, releaseRepoGuiLock, withRepoGuiLockCanFail,
+#endif
+ tentativelyAddPatch, tentativelyRemovePatches, tentativelyAddToPending,
+ finalizeRepositoryChanges,
+ copyRepository,
+ unrevertUrl,
+ applyToPristine, patchSetToPatches,
+ createPristineDirectoryTree,
+ optimizeInventory,
+ getMarkedupFile,
+ PatchSet
+ ) where
+
+import Darcs.Repository.Internal
+ (Repository(..), RepoType(..),
+ maybeIdentifyRepository, identifyRepository,
+ findRepository, amInRepository, amNotInRepository,
+ slurp_pending,
+ slurp_recorded, slurp_recorded_and_unrecorded,
+ withRecorded,
+ get_unrecorded, get_unrecorded_unsorted, get_unrecorded_no_look_for_adds,
+ read_repo, sync_repo, absolute_dir,
+ unsafe_fast_read_repo,
+ prefsUrl,
+ read_pending, add_to_pending,
+ withRepoLock,
+#ifdef HAVEWX
+ takeRepoGuiLock, releaseRepoGuiLock, withRepoGuiLockCanFail,
+#endif
+ tentativelyAddPatch, tentativelyRemovePatches, tentativelyAddToPending,
+ finalizeRepositoryChanges,
+ unrevertUrl,
+ applyToPristine, patchSetToPatches,
+ createPristineDirectoryTree,
+ optimizeInventory,
+ getMarkedupFile,
+ add_to_tentative_pristine
+ )
+import Darcs.Patch.Set ( PatchSet )
+
+import Control.Monad ( unless, when )
+
+import qualified Darcs.Repository.DarcsRepo as DarcsRepo
+import qualified Darcs.Repository.HashedRepo as HashedRepo
+import qualified Darcs.Repository.GitRepo as GitRepo
+
+import Darcs.Repository.Checkpoint ( write_checkpoint_patch, get_checkpoint )
+import Darcs.Repository.DarcsRepo ( apply_patches_with_feedback, simple_feedback,
+ add_to_tentative_pristine )
+import Darcs.Utils ( withCurrentDirectory )
+import Darcs.Patch ( Patch, patch2patchinfo, gzReadPatchFileLazily,
+ apply,
+ )
+import Darcs.Repository.Pristine
+ ( Pristine, identifyPristine,
+ easyCreatePristineDirectoryTree, createPristineFromWorking
+ )
+import Darcs.Repository.Format ( RepoFormat,
+ RepoProperty ( Darcs1_0, HashedInventory ),
+ format_has_together, format_has )
+import Darcs.Patch.Depends ( get_patches_beyond_tag )
+
+#include "impossible.h"
+
+import Darcs.Flags ( DarcsFlag( Verbose, Quiet, Partial, Lazy ) )
+import Darcs.Hopefully ( hopefully )
+import Printer ( text, putDocLn )
+\end{code}
+
+\begin{code}
+data HashedVsOld a = HvsO { old, hashed :: a }
+
+decideHashedOrNormal :: Monad m => RepoFormat -> HashedVsOld (m a) -> m a
+decideHashedOrNormal rf (HvsO { hashed = h, old = o })
+ | format_has_together [HashedInventory] rf = h
+ | format_has_together [Darcs1_0,HashedInventory] rf = o >> h
+ | otherwise = o
+
+copyRepository :: Repository -> IO ()
+copyRepository fromrepository@(Repo _ opts _ _)
+ | Partial `elem` opts || Lazy `elem` opts =
+ do isPartial <- copyPartialRepository fromrepository
+ unless (isPartial == IsPartial) $ copyFullRepository fromrepository
+ | otherwise = copyFullRepository fromrepository
+
+data PorNP = NotPartial | IsPartial
+ deriving ( Eq )
+
+copyInventory :: Repository -> IO ()
+copyInventory (Repo fromdir opts rf _) = do
+ (Repo todir _ rf2 _) <- identifyRepository opts "."
+ case True of
+ _ | format_has_together [HashedInventory] rf &&
+ format_has_together [HashedInventory] rf2
+ -> HashedRepo.copy_repo opts fromdir todir
+ _ | format_has_together [Darcs1_0,HashedInventory] rf &&
+ format_has_together [Darcs1_0,HashedInventory] rf2
+ -> do HashedRepo.copy_repo opts fromdir todir
+ DarcsRepo.copy_repo_patches opts fromdir todir
+ _ | format_has HashedInventory rf ||
+ format_has HashedInventory rf2
+ -> undefined
+ _ -> DarcsRepo.copy_repo_patches opts fromdir todir
+
+copyPartialRepository :: Repository -> IO PorNP
+copyPartialRepository fromrepository@(Repo repodir opts _ _) = do
+ mch <- get_checkpoint opts repodir
+ case mch of
+ Nothing -> do putStrLn "No checkpoint."
+ return NotPartial
+ Just ch ->
+ do write_checkpoint_patch ch
+ copyInventory fromrepository
+ local_patches <- identifyRepository opts "." >>= read_repo
+ let pi_ch = fromJust $ patch2patchinfo ch
+ needed_patches = reverse $ concat $
+ get_patches_beyond_tag pi_ch local_patches
+ apply opts False ch `catch`
+ \e -> fail ("Bad checkpoint!\n" ++ show e)
+ apply_patches_with_feedback opts False feedback putInfo needed_patches
+ putVerbose $ text "Writing the pristine"
+ pristine <- identifyPristine
+ createPristineFromWorking pristine
+ return IsPartial
+ where am_verbose = Verbose `elem` opts
+ am_informative = not $ Quiet `elem` opts
+ putVerbose s = when am_verbose $ putDocLn s
+ putInfo s = when am_informative $ putDocLn s
+ feedback = simple_feedback opts "Applying"
+
+copyFullRepository :: Repository -> IO ()
+copyFullRepository fromrepository@(Repo _ opts _ _) =
+ withRepoLock opts $ \torepository ->
+ do patches <- read_repo fromrepository
+ mapM_ (tentativelyAddPatchFromOutside torepository) $
+ map hopefully $ reverse $ concat patches
+ finalizeRepositoryChanges torepository
+ identifyPristine >>= createPristineWorking torepository
+ where createPristineWorking :: Repository -> Pristine -> IO ()
+ createPristineWorking repository pris =
+ do done <- easyCreatePristineDirectoryTree pris "."
+ unless done $ do
+ patches <- unsafe_fast_read_repo repository
+ apply_patches_with_feedback opts False
+ feedback putInfo $ reverse $ concat patches
+ am_informative = not $ Quiet `elem` opts
+ putInfo s = when am_informative $ putDocLn s
+ feedback = simple_feedback opts "Applying"
+
+-- The following adds to the inventory a patch that hasn't first been
+-- applied to our working directory.
+tentativelyAddPatchFromOutside :: Repository -> Patch -> IO Patch
+tentativelyAddPatchFromOutside (Repo dir opts rf (DarcsRepository _)) patch =
+ withCurrentDirectory dir $
+ do fp <- decideHashedOrNormal rf $ HvsO {
+ hashed = HashedRepo.add_to_tentative_inventory opts patch,
+ old = DarcsRepo.add_to_tentative_inventory opts patch
+ }
+ add_to_tentative_pristine fp
+ gzReadPatchFileLazily fp
+tentativelyAddPatchFromOutside (Repo dir _ _ GitRepository) patch =
+ withCurrentDirectory dir $ do (patch', token) <- GitRepo.writePatch dir patch
+ GitRepo.set_tentative_tree token
+ return patch'
+\end{code}
}
Context:
[fix checkpoint handling with hashed inventories.
David Roundy <droundy at darcs.net>**20070330154325]
[fix bug in makefile regarding manual.
David Roundy <droundy at darcs.net>**20070330154259]
[whitespace cleanups in makefile.
David Roundy <droundy at darcs.net>**20070330152018]
[by default test hashed inventories plus normal.
David Roundy <droundy at darcs.net>**20070329010900]
[make --set-scripts-executable work with get and hashed inventories.
David Roundy <droundy at darcs.net>**20070329010828]
[fix unrecord.sh to use proper darcs.
David Roundy <droundy at darcs.net>**20070328181345]
[fail on error in get_patches_beyond_tag.
David Roundy <droundy at darcs.net>**20070328172408
This will expose any bugs where we use this function wrongly.
(As was the case in darcs check --partial with hashed inventories.)
]
[Fix manual compilation errors (due to source reorganisation).
Eric Kow <eric.kow at loria.fr>**20070313214302]
[Fix conflicts.
Eric Kow <eric.kow at loria.fr>**20070313210908]
[Modernise imports of Data.(Char|Int|List|Maybe).
Eric Kow <eric.kow at loria.fr>**20070313210805]
[Modernise imports of Control.Monad.
Eric Kow <eric.kow at loria.fr>**20070313205312]
[Modernise imports of System.Directory.
Eric Kow <eric.kow at loria.fr>**20070313205200]
[Correct compilation errors in win32 due to src reorganisation.
Eric Kow <eric.kow at loria.fr>**20070313210732]
[Move Haskell sources to src directory with hierarchical structure.
Eric Kow <eric.kow at loria.fr>**20070313200751
src
general modules, possibly to be spun off as non-darcs libraries
administrative stuff (e.g., modules generated by autoconf)
src/Darcs
darcs-specific modules, catch-all for modules I didn't know what
to do with
src/Darcs/Patch
core patch operations
src/Darcs/Repository
modules specific to the maintenance of the darcs repo, especially the _darcs
stuff
src/Darcs/Commands
the darcs commands, e.g. pull, record, whatsnew
]
[Move osx directory to src.
Eric Kow <eric.kow at loria.fr>**20070313200304]
[Move C files to src directory.
Eric Kow <eric.kow at loria.fr>**20070313200135]
[Add subdirectories for source files.
Eric Kow <eric.kow at loria.fr>**20070313194050]
[Extend GHCFLAGS override mechanism to allow for subdirectories.
Eric Kow <eric.kow at loria.fr>**20070313193917]
[Fix date.t pathname construction in whatsnew test.
Dave Love <fx at gnu.org>**20070305203305]
[In tests, don't assume diff has -u, -x flags.
Dave Love <fx at gnu.org>**20070305202838]
[Fixes for Solaris sh in tests: no $(...), test -e, or ! pipelines.
Dave Love <fx at gnu.org>**20070311170210]
[Fix conflicts related to --ssh-cm flag.
Eric Kow <eric.kow at loria.fr>**20070311205820]
[Fix test/ssh.sh conflicts.
Eric Kow <eric.kow at loria.fr>**20070311205156]
[Flip ssh test to accept a --ssh-cm argument.
Eric Kow <eric.kow at loria.fr>**20070310063327]
[Add a --ssh-cm flag with --no-ssh-cm as the default.
Eric Kow <eric.kow at loria.fr>**20070310063132
Previously, darcs would launch the ControlMaster by default, but it seems to
hang on some large repositories and cause pain. The user can always add
--ssh-cm if s/he wants it on.
]
[Rename --disable-ssh-cm to --no-ssh-cm.
Eric Kow <eric.kow at loria.fr>**20070310061124
This appears to be more consistent with other darcs flags.
]
[Do not append a colon to hostname when calling sftp (issue362).
Eric Kow <eric.kow at loria.fr>**20070308201844
This does not solve all of issue362, just a minor annoyance along its way.
]
[Add changelog entries (file: quick) for pull --complement changes.
Kevin Quick <quick at sparq.org>**20070205185329]
[In tests, don't assume grep has -q and -x flags.
Dave Love <fx at gnu.org>**20070225114022]
[Don't depend on `seq' in tests.
Dave Love <fx at gnu.org>**20070225113255]
[Fix bash-ism `export foo=' in tests.
Dave Love <fx at gnu.org>**20070225113216]
[Get `open' and `psignal' declared on Solaris.
Dave Love <fx at gnu.org>**20070225113041
The header requirements for open are actually as documented for glibc.
]
[Make test harnesses define PWD in environment in case shell doesn't.
Dave Love <fx at gnu.org>**20070225112124]
[Zsh completion: support repos that use _darcs/pristine
Georg Neis <gn at oglaroon.de>**20070301103113]
[Add send --output-auto-name information to the documentation.
Zachary P. Landau <kapheine at divineinvasion.net>**20070221014555]
[Add test for send --output-auto-name.
Zachary P. Landau <kapheine at divineinvasion.net>**20070221014501]
[Add --output-auto-name option to Send.
Zachary P. Landau <kapheine at divineinvasion.net>**20070221014327]
[More sed compliance on pull_compl test.
Eric Kow <eric.kow at loria.fr>**20070217073744]
[Fix pull_compl test sed compliance.
Kevin Quick <quick at sparq.org>**20070214033347]
[Add pull_compl test; note interesting duplicate repo elimination in docs.
Kevin Quick <quick at sparq.org>**20070206065236]
[Use LaTeX for ISO 8601 hyperlink.
Eric Kow <eric.kow at loria.fr>**20070217071601]
[Documentation only: add link for ISO 8601 format
Kirsten Chevalier <chevalier at alum.wellesley.edu>**20070216004007
In the documentation, make "ISO 8601 format" a link to the official
W3C page describing the format (for those who don't know it by heart).
]
[fix some changelog entries
Tommy Pettersson <ptp at lysator.liu.se>**20061231210024]
[change "current" to (or add) "pristine" in verbose message and doc
Tommy Pettersson <ptp at lysator.liu.se>**20070211191942]
[Resolve conflict between complement add and get_recorded_unsorted.
Kevin Quick <quick at sparq.org>**20070206071832]
[Added --complement to pull to allow "exclusion" repos
Kevin Quick <quick at sparq.org>**20070204181301]
[Correct test for quoted arguments in DARCS_EDITOR.
Eric Kow <eric.kow at loria.fr>**20070204211312
1) On MacOS X, grep lives in /usr/bin, not /bin
2) We shouldn't escape the double quotes because they're already protected
by the single quotes
]
[Restore working directory if no repository is found (issue385).
Zachary P. Landau <kapheine at divineinvasion.net>**20070203173440
seekRepo continues to go further up the directory tree looking for a
repository. If we are not in a repository, our current working directory
becomes /. This causes problems with code that falls back on creating
temporary files in the current directory. This patch will restore the
directory the user started in if seekRepo fails.
]
[refactor get_unrecorded.
David Roundy <droundy at darcs.net>**20070128231405
I've removed the [DarcsFlag] argument, and added two new functions
get_unrecorded_unsorted, and get_unrecorded_no_look_for_adds, which do what
they say. I think this simplifies its use, and cleans things up a tad. It
doesn't scale to many different ways to get_unrecorded, but I don't think
we want to go there.
]
[use (empty) opts to Repository in list_authors and make_changelog
Tommy Pettersson <ptp at lysator.liu.se>**20070128165840
They where left out in the opts Repository refactoring.
]
[fix bug triggered in replace.sh
David Roundy <droundy at darcs.net>**20070128002206
This bug was an annoying one that seemed to involve trouble caused by
unsafeInterleaveIO and the order of evaluation, since we change the working
directory. I've simplified the code significantly. Complicating the debug
process was a race condition caused by the lack of --ignore-times in
replace.sh, which was because darcs replace didn't accept that option.
]
[refactor: add opts into Repository.
David Roundy <droundy at darcs.net>**20070128000728]
[add test for replace that messes with unrecorded hunks
Tommy Pettersson <ptp at lysator.liu.se>**20070125153803]
[go back to using system for edit_file/view_file instead of exec (system 'cmd "$ARG"')
Benedikt Schmidt <beschmi at cloaked.de>**20070131162811]
[use TODO instead of pass for record_editor test
Benedikt Schmidt <beschmi at cloaked.de>**20070131161635]
[add some tests for edit_file and DARCS_EDITOR handling
Benedikt Schmidt <beschmi at cloaked.de>**20070131011526]
[fix bugs in replace.sh script--running wrong darcs.
David Roundy <droundy at darcs.net>**20070128001826]
[Remove extraneous parentheses (RepoFormat).
Eric Kow <eric.kow at loria.fr>**20070127231359]
[make write_repo_format agree with read_repo_format (use | for separating properties)
Benedikt Schmidt <beschmi at cloaked.de>**20070126143752]
[add documentation for DARCS_PAGER
Benedikt Schmidt <beschmi at cloaked.de>**20070126142649]
[Fix issue383 - allow --disable-ssh-cm for 'darcs changes'.
Georg Neis <gn at oglaroon.de>**20070121224417]
[(add a + mv a b = add b) and (mv a b + remove b = remove a)
malebria at riseup.net**20070108160933]
[update web page for new mailing list server.
David Roundy <droundy at darcs.net>**20070116162930]
[Canonize Marco Túlio Gontijo e Silva.
Eric Kow <eric.kow at loria.fr>**20070113231736
Sorry for stripping off the accent.
]
[Redundant noncomments
malebria at riseup.net**20070109125519
noncomments was already called by get_preffile via get_lines.
]
[Remove unused functions from Population.
Eric Kow <eric.kow at gmail.com>**20070107232034
The functions are not shown to be used by any other part of darcs.
Perhaps they should be restored if we ever get to work seriously on
libdarcs.
]
[Import IO.bracket instead of Control.Exception.bracket in Exec.
Eric Kow <eric.kow at loria.fr>**20070107211935
This makes darcs work on *nix the same way it did before Simon Marlow's
runProcess patch for Windows and my conflict-resolution tweaks.
]
[Import bracketOnError from Workaound instead of Control.Exception.
Eric Kow <eric.kow at gmail.com>**20061225212444
bracketOnError was introduced in GHC 6.6, whereas we want to support 6.4.1 and
higher.
]
[Fix conflicts and compile errors (Exec runProcess stuff).
Eric Kow <eric.kow at gmail.com>**20061225212423
Side A:
Simon Marlow: Use System.Process on Windows
Side B:
Edwin Thomson : Make Exec.lhs not import unneeded Control.Exception functions
when compiling on Windows.
Magnus Jonsson : Added rigorous error checking in exec
Compile errors in question were just import-related issues.
]
[Add Workaround.bracketOnError (introduced in GHC 6.6).
Eric Kow <eric.kow at gmail.com>**20061225201830
This is to compensate for the missing Control.Exception.bracketOnError
in GHC 6.4.2
]
[Use System.Process on Windows
Simon Marlow <simonmar at microsoft.com>**20061129160710
This was an attempt to address "[issue218] Patch bundle failed hash",
but unfortunately it doesn't fix the problem. Still, System.Process
is a better way to invoke external commands these days.
For now, the new code only replaces the Windows version of exec. This
means that GHC 6.4 will be required to build darcs on Windows. Better
would be to add a configure test, but I ran out of time here.
]
[Fix issue376 - inconsistent punctuation in darcs get.
Eric Kow <eric.kow at gmail.com>**20061231180024
]
[Fix issue367 - pull help message.
Eric Kow <eric.kow at gmail.com>**20061231174322]
[fix [issue370], darcs ignored args contained in VISUAL variable
Benedikt Schmidt <beschmi at cloaked.de>**20061220110807
given VISUAL="emacs -nw", darcs would run "emacs file" instead of
"emacs -nw file"
]
[Make annotate work on files with spaces in the name
edwin.thomson at businesswebsoftware.com**20061218094210
]
[fix spelling errors in comments
Benedikt Schmidt <beschmi at cloaked.de>**20061222020037]
[fix link error with gcc 4.12/glibc 2.4
Benedikt Schmidt <beschmi at cloaked.de>**20061220091436
errno is a C macro that expands to a function call in
some versions of glibc, so it can't be treated like
a CInt there
]
[Fix includes in External.hs.
Dave Love <fx at gnu.org>**20061218224158
You can't put comments before {-# INCLUDE ...
]
[Fix ssh.sh test.
Dave Love <fx at gnu.org>**20061218223442]
[Prettify exceptions in identifyRepository.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20061218025453]
[Implement prettyException.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20061218025440]
[Simplify common libcurl errors.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20061218025419]
[fix issue369 by failing if quickcheck isn't available
David Roundy <droundy at darcs.net>**20061218021545]
[QP-encode bundles when putting to a remote repo.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20061218003034]
[Don't QP-encode bundles when pushing locally.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20061218002533]
[Make darcs push QP-encode the bundle before transferring.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20061217234635
This should hopefully fix issues with scp/sftp corrupting bundles in transit.
]
[Adapt callers to new calling convention for make_email.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20061217234608
Use Just at the right places.
]
[Make arguments to make_email optional.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20061217234501
Makes contents and filename optional. If they are omitted, we still
generate a conforming MIME message.
]
[add warning about ALL and obliterate --all to documentation
Tommy Pettersson <ptp at lysator.liu.se>**20061219180302]
[fix pending bug in darcs get --tag.
David Roundy <droundy at darcs.net>**20061217225256
This patch addresses the bug displayed in Tommy's test:
Mon Dec 11 20:28:21 CET 2006 Tommy Pettersson <ptp at lysator.liu.se>
* add test for get --tag and pending
]
[add test for get --tag and pending
Tommy Pettersson <ptp at lysator.liu.se>**20061211192821]
[add new test related to issue262.
David Roundy <droundy at darcs.net>**20061217221041
This issue seems to already have been fixed.
]
[fix issue360, with darcs mv foo foo.
David Roundy <droundy at darcs.net>**20061217212340]
[Separate comment from OPTIONS pragma for GHC 6.4 compatibility.
Eric Kow <eric.kow at gmail.com>**20061217041212
]
[Resolve conflicts in David's hashed_inventory optimize patches.
Eric Kow <eric.kow at loria.fr>**20061217031027
]
[Make hashed inventories support optimize and reordering.
David Roundy <droundy at darcs.net>**20061216193913]
[Canonize Kirsten Chevalier.
Kirsten Chevalier <chevalier at alum.wellesley.edu>**20061217025004
Added my name to the list of authors who originally only submitted an email
address.
]
[Documentation only - clarify meaning of --from and --author
Kirsten Chevalier <chevalier at alum.wellesley.edu>**20061217024927
Clarified the meaning of --from and --author. I had assumed that these
options also set the From: address on the email sent by "darcs sent". Of
course they don't, but it's better to make this clear.
]
[Added test for reverting an unrecorded add
edwin.thomson at businesswebsoftware.com**20061215180047]
[fix bug in haskell_policy check for HopefullyPrivate.
David Roundy <droundy at darcs.net>**20061210234453
Perhaps with this test, we can rename it to CertainlyPrivate? :)
]
[don't use HopefullyPrivate outside of Hopefully.
David Roundy <droundy at darcs.net>**20061210231623
The idea is to hide the Hopefully constructors, so I can hide some more
information in there, if I like, which should be handy for the hashed
inventories, and may also come in handy (for similar reasons) with git
repositories.
]
[change Maybe Patch to Hopefully Patch.
David Roundy <droundy at darcs.net>**20061210213536
This rather pervasive change move us to using a new Hopefully type, which
is similar to Either String for storing patches that may or may not exist.
This should improve error reporting. At a minimum it'll making easier to
improve error reporting.
]
[resolve conflict in white space.
David Roundy <droundy at darcs.net>**20061210211846]
[fix pending bug that broke several_commands.sh.
David Roundy <droundy at darcs.net>**20061209223916]
[add test for reverting removed directory
Tommy Pettersson <ptp at lysator.liu.se>**20061108202344]
[allow commented tests in tests_to_run.
David Roundy <droundy at darcs.net>**20061211000322]
[remove link to obsolete mirror of kernel repo.
David Roundy <droundy at darcs.net>**20061212012644]
[add test that sigPIPE doesn't make darcs fail.
David Roundy <droundy at darcs.net>**20061209230155]
[make optimize less DarcsRepo-specific.
David Roundy <droundy at darcs.net>**20061209205755]
[Hard link support on Windows
Simon Marlow <simonmar at microsoft.com>*-20061204162040
This works only on NTFS filesystems. Also it requires Windows 2000 or
later; this may or may not be acceptable, I'll leave that up to the
darcs maintainers to decide.
]
[eliminate DarcsRepo.am_in_repo.
David Roundy <droundy at darcs.net>**20061204153128
This patch is a Good Thing, even though repair and optimize don't yet
properly support anything bug old-fashioned repositories, because without
it, when using such repositories, one can find those command operating on a
different repository than intended (e.g. the test suite runs optimize on
the darcs repository itself). Now they'll fail as they ought to, when run
on a repo format they don't support.
]
[fix hashed inventory bug in add and prevent it happening again.
David Roundy <droundy at darcs.net>**20061204020823]
[make get and put reuse initialize code.
David Roundy <droundy at darcs.net>**20061203220833
This patch actually fixes put to properly accept and use any flags that
init accepts, which is a Good Thing. It also ensures that get behaves
consistently with init in the future. Also a Good Thing.
]
[make put work with hashed inventories (and test for this).
David Roundy <droundy at darcs.net>**20061203211141]
[make it an error to "put" into a preexisting directory.
David Roundy <droundy at darcs.net>**20061203205826
This changes darcs' behavior I believe for the better. Often one could be
tempted to try to put into a directory, expecting to have the repository
created as a subdirectory there, and it seems confusing (confused me) to
have instead the repository contents mingled with whatever was already in
that directory. Put should behave like get in this regard, in that it
shouldn't mix the new repo with a preexisting directory.
]
[fix new get to not mess up pending (fixes latest hashed_inventory.sh tests).
David Roundy <droundy at darcs.net>**20061203173722]
[add some more hashed_inventory.sh tests.
David Roundy <droundy at darcs.net>**20061203173207]
[fix more incompatible uses of DarcsRepo.
David Roundy <droundy at darcs.net>**20061203064355]
[make replace work with hashed inventories.
David Roundy <droundy at darcs.net>**20061203055452]
[Make get_tag test work with hashed inventories.
David Roundy <droundy at darcs.net>**20061203055019]
[make directory_confusion pass with hashed inventories.
David Roundy <droundy at darcs.net>**20061203035551
I'm not sure whether there is still a bug in the pending handling here, but
at least it doesn't crash...
]
[catch exceptions in stdout_is_a_pipe
Simon Marlow <simonmar at microsoft.com>**20061129160620]
[hFlush after "waiting for lock" message
Simon Marlow <simonmar at microsoft.com>**20061129160342
On Windows, stdout isn't always in line-buffered mode, but we really
want to see the message about waiting for a lock quickly. Mostly
because ^C isn't always caught properly on Windows and lock files are
often left behind, but that's another storey...
]
[add explicit import list
Simon Marlow <simonmar at microsoft.com>**20061129160144]
[Improve error messages in push_cmd
chevalier at alum.wellesley.edu**20061207040701
I ran into this because MSYS was munging my repository directory in a
horrible way. This resulted in a bad repo directory getting passed into
darcs, which resulted in a fromJust error, which we all know makes the
baby Jesus cry. So, I at least refactored the code to give a better
error message, though there may well be a better solution.
]
[Hard link support on Windows
Simon Marlow <simonmar at microsoft.com>**20061204162040
This works only on NTFS filesystems. Also it requires Windows 2000 or
later; this may or may not be acceptable, I'll leave that up to the
darcs maintainers to decide.
]
[adapt test sametwice to new obliterate --all feature
Tommy Pettersson <ptp at lysator.liu.se>**20061130132058]
[Adapt test perms.sh to obliterate --all feature.
Eric Kow <eric.kow at gmail.com>**20061209200625]
[use impossible to document impossible case in Repair.
David Roundy <droundy at darcs.net>**20061204152854]
[use variable TEST_FILTER_FILE in makefile.
David Roundy <droundy at darcs.net>**20061204151217]
[configure should fail if a required module isn't present.
David Roundy <droundy at darcs.net>**20061128024557]
[Remove raw_mode functions from atomic_create.h.
Eric Kow <eric.kow at gmail.com>**20061008202738
It seems these were once implemented in compat.c and have since been
reimplemented in Haskell by Ian Lynagh on 2005-07-30. These appear to
just be leftover declarations in the C header.
]
[resolve conflicts
Tommy Pettersson <ptp at lysator.liu.se>**20061117222757
between 'clean up unrevert and pending handling'
and 'ignore failure from hSetBufferin'
]
[ignore failure from hSetBuffering
Tommy Pettersson <ptp at lysator.liu.se>**20061117221424
This affects:
issue41 Doesn't like pasted text.
issue94 Crash on bogus input
issue146 hSetBuffering: invalid argument
issue318 buffering error of darcs record under bash/cmd.exe
It doesn't necessarily "fix" anything. It prevents darcs from quiting,
instead continuing with perhaps an undesirable buffering mode, which may or
may not be better ... or worse.
]
[Fix curses stuff, especially on Solaris 10.
Dave Love <fx at gnu.org>**20061120171211]
[TAG 1.0.9rc2
Tommy Pettersson <ptp at lysator.liu.se>**20061116140351]
[add some changelog entries
Tommy Pettersson <ptp at lysator.liu.se>**20061116135447]
[Define infodepspatch locally in AmendRecord instead of exporting it from Patch
edwin.thomson at businesswebsoftware.com**20061121093332
]
[Make libcurl use any http authentication.
Tobias Gruetzmacher <darcs at portfolio16.de>**20061118230406
This let darcs use repositories protected with digest authentication.
]
[Redirect stderr to Null when exiting SSH control master.
Eric Kow <eric.kow at loria.fr>**20061118212115
This suppresses the output
* Pseudo-terminal will not be allocated because stdin is not a terminal.
(result of redirecting stdin from /dev/null)
* Exit request sent.
(seems to be normal output. Seems also that there is no way to suppress
this; -q does not do the job, for example)
]
[Overhaul and improve automation of ssh_test.
Eric Kow <eric.kow at gmail.com>**20061121141802
* Now quits if you don't supply REMOTE; does not have any
silly default values
* Options now passed in through environment variables, so:
NO_CONTROL_MASTER=1 REMOTE=me at 192.168.2.12 ./ssh_test
* Performs some automated success checks (which means that
it should be possible to use this from the harness if you
have ssh-agent running)
* Performs darcs send test
* Does not try to pass darcs-ssh flags (like --disable-ssh-cm)
to non-ssh-using commands like record
]
[Rename ssh_test to ssh.sh (for shell harness).
Eric Kow <eric.kow at gmail.com>**20061121141101
Note that you must set environment variables for it do anything
useful (namely REMOTE=you at someserver); something like the following
should work:
REMOTE=me at 192.168.2.3 make test
You need to be using public key authentication to have a fully
automated test.
]
[Support darcs send --disable-ssh-cm.
Eric Kow <eric.kow at loria.fr>**20061121134158]
[fix for Issue111, obliterate --all
David Roundy <droundy at darcs.net>**20061129164016
This is a patch to implement the wishless item Issue111,
which asks for an --all option to obliterate. The idea is
that you might use the --patches flag to select a bunch of
patches and not want to have to say yess to all of them.
For good measure, I also added it to unpull and unrecord.
]
[Canonize Edwin Thomson.
Eric Kow <eric.kow at gmail.com>**20061118174454]
[Make Exec.lhs not import unneeded Control.Exception functions when compiling on Windows.
edwin.thomson at businesswebsoftware.com**20061114182952
]
[Annotate various boring patterns.
Dave Love <fx at gnu.org>**20061113225701]
[Add make rules for tags files.
Dave Love <fx at gnu.org>**20061113213923]
[Amending a patch doesn't remove explicit dependencies
edwin.thomson at gmail.com**20061110222837]
[look for --disable-ssh-cm in defaults files (issue351)
Tommy Pettersson <ptp at lysator.liu.se>**20061117180942]
[refactor is_malicious_path (for easier reading)
Tommy Pettersson <ptp at lysator.liu.se>**20061113191040]
[really use new malicious file path check in pull (not in changes)
Tommy Pettersson <ptp at lysator.liu.se>**20061113182628]
[Add a semi-automated test for SSH-related things.
Eric Kow <eric.kow at gmail.com>**20061110110801
Testing SSH stuff is tricky in that (1) you need some place to connect
to and (2) you often want to make sure that the user interactions work
out right. But it can't hurt to script away the boring stuff so that
you are naturally encouraged to test things out more thoroughly.
]
[Pass -q flag to scp only, not ssh and scp.
Eric Kow <eric.kow at gmail.com>**20061108225137
Putty's SSH (plink) does not recognise the -q flag.
]
[remove old malicious_filename check (issue177)
Tommy Pettersson <ptp at lysator.liu.se>**20061110211757]
[Update FSF address in DarcsCommandsAux.lhs.
Eric Kow <eric.kow at loria.fr>**20061113032907]
[use new malicious file path check in pull and apply (issue177)
Tommy Pettersson <ptp at lysator.liu.se>**20061110211702]
[fix latex markup error
Tommy Pettersson <ptp at lysator.liu.se>**20061110205511]
[add new malicious file path check system
Tommy Pettersson <ptp at lysator.liu.se>**20061110132338
Adds a new module DarcsCommandsAux for auxiliary functionality common to
more than one darcs command.
]
[add function for finding all file names in a patch
Tommy Pettersson <ptp at lysator.liu.se>**20061109144144]
[Resolve conflict in Resolution.lhs.
Eric Kow <eric.kow at loria.fr>**20061113032236
]
[External resolution can resolve conflicting adds
edwin.thomson at businesswebsoftware.com**20061106114755]
[Only copy files needed in external_resolution
edwin.thomson at businesswebsoftware.com**20061106114719]
[change message in 'darcs check' from "applying" to "checking" (issue147)
Tommy Pettersson <ptp at lysator.liu.se>**20061111154259]
[add missing space in print_version (issue283)
Tommy Pettersson <ptp at lysator.liu.se>**20061111132808]
[Extra boring patterns.
Dave Love <fx at gnu.org>**20061109004620]
[really dump generated darcs.ps in subdir manual/
Tommy Pettersson <ptp at lysator.liu.se>**20061108175122
Now with working makefile!
]
[update annotate for hashed inventories
Jason Dagit <dagit at codersbase.com>**20061108033202
Fixes test suite failure for annotate on a repository with hashed inventory.
]
[Update FSF address in copyright headers.
Dave Love <fx at gnu.org>**20061104180508]
[Add COPYING.LIB for fpstring.c.
Dave Love <fx at gnu.org>**20061104180121]
[Pass email address only for %t in --sendmail-command.
Eric Kow <eric.kow at gmail.com>**20061029112604
Given an address like Bubba Dupont <bubba at jonescollege.edu>, pass
bubba at jonescollege.edu to the %t argument. Msmtp seems to require this
at least. Note that the full address (Bubba Dupont etc) is already
encoded in the message body anyway.
]
[Refactor sendEmail and sendEmailDoc.
Eric Kow <eric.kow at gmail.com>**20061029105048]
[Make Send code slightly easier to understand.
Eric Kow <eric.kow at gmail.com>**20061029100316]
[make darcs.cgi look for both pristine and current
Dan <greenash at yahoo.com>**20061101222005]
[Don't lock the repo during `query manifest' (issue315).
Dave Love <fx at gnu.org>**20061105125701]
[Include curses.h with term.h (issue326).
Dave Love <fx at gnu.org>**20061105123851]
[make Get work with hashed inventory.
David Roundy <droundy at darcs.net>**20061101150901
This is inefficient, but it uses only the pre-existing refactored
functions, so it's the easiest approach. Later we can write an efficient
bit of code to do the same thing.
]
[make darcs check use Repository framework.
David Roundy <droundy at darcs.net>**20060927024514]
[fix parsing of hashed inventories.
David Roundy <droundy at darcs.net>**20060927024505]
[put Repository in Show class for debugging ease.
David Roundy <droundy at darcs.net>**20060927021202]
[add test target for testing hashed inventories.
David Roundy <droundy at darcs.net>**20060927020127]
[add a bit of hashed inventory code.
David Roundy <droundy at darcs.net>**20060918173904]
[I fixed up a bit of bad grammars.
Bill Trost <trost at cloud.rain.com>**20061102033207]
[bumb version to 1.0.9rc2
Tommy Pettersson <ptp at lysator.liu.se>**20061009204226]
[dump generated darcs.ps in subdir manual/
Tommy Pettersson <ptp at lysator.liu.se>**20061102152516]
[resolve conflicts
Tommy Pettersson <ptp at lysator.liu.se>**20061102184834
Merge Unrecord fix for checkpoints inventory with Repository code refactoring.
]
[remove unrecorded tags from the checkpoint inventory (issue281)
Tommy Pettersson <ptp at lysator.liu.se>**20061031220157
The commands Check, Get and Repair all can make use of the checkpoint
inventory. Unrecord, Unpull and Obliterate forgot to remove deleted patches
from that inventory.
]
[add test that unrecord of tag removes checkpoint
Tommy Pettersson <ptp at lysator.liu.se>**20061007152648]
[English and markup fixes.
Dave Love <fx at gnu.org>**20061104153036]
[add HACKING file
Jason Dagit <dagit at codersbase.com>**20061104214749]
[Do _not_ allow escaped quotes in `quoted'.
Eric Kow <eric.kow at loria.fr>**20061030064531
This undoes the patch by Dave Love: Allow escaped quotes in `quoted'.
The immediate problem is that it breaks make_changelog (because one of
Tommy's entries matches on a backslash). This feature might need more
discussion before we include it (or not).
]
[Tidy filenames before invoking tar
Wim Lewis <wiml at hhhh.org>**20061026035535
Only use the last path component of --dist-name for the distribution
name; the rest is still used when creating the final tar file. (issue323)
]
[Add hi-boot and o-boot extensions in default boring file.
Eric Kow <eric.kow at gmail.com>**20061019071304
These are automatically generated from hs-boot.
Suggested by Bulat Ziganshin.
]
[Replace tabs with spaces (escaped quotes in PatchMatch).
Eric Kow <eric.kow at loria.fr>**20061023192003]
[Fix some obsolete autoconf stuff.
Dave Love <fx at gnu.org>**20061015155914]
[Allow escaped quotes in `quoted'.
Dave Love <fx at gnu.org>**20060716193940]
[TAG 1.0.9rc1
Tommy Pettersson <ptp at lysator.liu.se>**20061008175207]
[bump version to 1.0.9rc1
Tommy Pettersson <ptp at lysator.liu.se>**20061008175156]
[Added --store-in-memory option for diff
edwin.thomson at businesswebsoftware.com**20061006122802
]
[Move RawMode into DarcsUtils to break cyclic imports on Win32
Josef Svenningsson <josef.svenningsson at gmail.com>**20061004120024]
[Look for Text.Regex in package regex-compat. Needed for GHC 6.6
Josef Svenningsson <josef.svenningsson at gmail.com>**20061004123158]
[Added rigorous error checking in exec
Magnus Jonsson <magnus at smartelectronix.com>**20061006222630
All lowlevel C return values are checked and turned into
exceptions if they are error codes. In darcs main
ExecExceptions are caught and turned into error messages
to help the user.
]
[Require 'permission denied' test for MacOS X again.
Eric Kow <eric.kow at gmail.com>**20060930121032
This removes a workaround that had demoted a pull.pl test to a mere TODO under
MacOS X. For some reason, under MacOS X, we would occasionally get "Unexpected
error: 0" instead of "permission denied". The error was first reported on
2005-11-06 by Erik Schnetter. We still don't know why it does this, but now
test seems to systematically "unexpectedly succeed" under MacOS X 10.4.7.
Perhaps something in MacOS X that was fixed since the error was reported?
]
[In procmail examples, don't use a lock file
era+darcs at iki.fi**20060924111522]
[add some changelog entries
Tommy Pettersson <ptp at lysator.liu.se>**20060930120140]
[remove duplicate file names in fix_filepaths (fixes issue273)
Tommy Pettersson <ptp at lysator.liu.se>**20060929145335]
[add test for replace command with duplicated file name
Tommy Pettersson <ptp at lysator.liu.se>**20060929144008]
[remove some tabs from darcs source
Tommy Pettersson <ptp at lysator.liu.se>**20060929211203]
[--matches now accepts logical 'and' 'or' '!' in addition to '&&' '||' 'not'.
Pekka Pessi <ppessi at gmail.com>**20060915140406]
[Canonize Era Eriksson.
Eric Kow <eric.kow at loria.fr>**20060928223224]
[Move bug reporting code to its own module.
Eric Kow <eric.kow at loria.fr>**20060928222826
Fixes circular dependency caused by David's unrevert cleanup (which moves
edit_file to DarcsUtil, thus causing it to depend on Exec) and Tommy's
exec patches (which add impossible.h to Exec, thus causing it to depend
on DarcsUtil).
]
[clean up unrevert and pending handling.
David Roundy <droundy at darcs.net>**20060917214136]
[Reword paragraph about Procmail's umask handling
era+darcs at iki.fi**20060924114546
The explanation now helpfully hints that similar tricks may be necessary
in other mail programs, too
]
[Wrap .muttrc example so it doesn't bleed into margin in PostScript version
era+darcs at iki.fi**20060924111313]
["Granting access to a repository": remove odd orphaned? sentence
era+darcs at iki.fi**20060924111142]
[era's trivial typo fixes
era+darcs at iki.fi**20060924110945
* best_practices.tex (subsection{Conflicts}): \emph pro \verb
around emphasized word "only"
* DarcsArguments.lhs (intersection_or_union): uppercase "[DEFAULT]";
(disable_ssh_cm docs): remove duplicate "which"
* Help.lhs: Missing full stop in description of --extended-help
* Mv.lhs (mv_description): Missing apostrophe in "Apple's"
* PatchShow.lhs (showHunk): Replace "that the white space must not"
with "that whitespace must not"
]
[show error messages when starting and stoping the ssh control master
Tommy Pettersson <ptp at lysator.liu.se>**20060916010645]
[redirect errors to null where exec output is used but failure is not fatal
Tommy Pettersson <ptp at lysator.liu.se>**20060916010116
Error messages in the output would destroy the result, but if the command
fails some other action is taken, so error messages shall not be displayed
to the user.
]
[redirect errors to stderr where exec output is used
Tommy Pettersson <ptp at lysator.liu.se>**20060916005651
Error messages would destroy the result if they ended up in the output.
If the external command fails, darcs should (but does not always) fail.
]
[redirect errors to stderr where exec is checked and darcs fails
Tommy Pettersson <ptp at lysator.liu.se>**20060916004407
In these situations the user will get both the error message from the
failing external command and a message from darcs about what action it
could not perform.
]
[simplify helper function stupidexec in copyRemoteCmd
Tommy Pettersson <ptp at lysator.liu.se>**20060915222923]
[reindent some long lines
Tommy Pettersson <ptp at lysator.liu.se>**20060915222654]
[update calls to exec and exec_fancy to new interface
Tommy Pettersson <ptp at lysator.liu.se>**20060915222226]
[fix typo
Tommy Pettersson <ptp at lysator.liu.se>**20060915164446]
[rewrite Exec.lhs, new exec interface with Redirects
Tommy Pettersson <ptp at lysator.liu.se>**20060911102933
Make the code structure a bit simpler and easier to understand.
Only one (fancy) version of exec.
]
[Fix Windows stderr non-redirection.
Eric Kow <eric.kow at gmail.com>**20060909055204
(It was consistently redirecting to stdout.)
Also make the exec code more readable/transparent.
]
[whatsnew --look-for-adds doesn't read unadded files (fix for issue79)
Jason Dagit <dagit at codersbase.com>**20060910193803
The default mode for whatsnew --look-for-adds is summary mode. In summary
mode full patches are not needed. This fix changes whatsnew
--look-for-adds to stop computing the full patch for a file when the
file is not managed by darcs.
]
[Correct canonical email for Kirill Smelkov
Kirill Smelkov <kirr at landau.phys.spbu.ru>**20060912080004]
[Be explicit about timezone handling (issue220); assume local by default.
Eric Kow <eric.kow at gmail.com>**20060812102034
Except for the local timezone in the user interface, this patch is not
expected to change darcs's behaviour. It merely makes current practice
explicit:
- Assume local timezone when parsing date strings from the user
interface (previous behaviour was assuming UTC).
- Assume UTC timezone when parsing date strings from PatchInfo.
Newer patch date strings do *not* specify the timezone, so it
would be prudent to treat these as UTC.
- Disregard timezone information altogether when reading patch
dates (issue220). Note that this bug was not caused by assuming local
timezone, because legacy patch date strings explicitly tell you what
the timezone to use. The bug was caused by a patch that fixed
issue173 by using timezone information correctly. To preserve
backwards-compatability, we deliberatly replicate the incorrect
behaviour of overriding the timezone with UTC.
(PatchInfo.make_filename)
]
[Account for timezone offset in cleanDate (Fixes issue173).
Eric Kow <eric.kow at gmail.com>**20060610193049
]
[move test for tabs from makefile to haskell_policy test
Tommy Pettersson <ptp at lysator.liu.se>**20060730122348]
[add test for haskell policy
Tommy Pettersson <ptp at lysator.liu.se>**20060730121404]
[ratify some uses of readFile and hGetContents
Tommy Pettersson <ptp at lysator.liu.se>**20060730121158]
[Remove direct dependency to mapi32.dll; Improve MAPI compatibility.
Esa Ilari Vuokko <ei at vuokko.info>**20051130000915]
[Canonize Kirill Smelkov and Anders Hockersten.
Eric Kow <eric.kow at gmail.com>**20060910052541]
[Correct 'one one' in web page.
Eric Kow <eric.kow at loria.fr>**20060908191241]
[Fix merge conflicts.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20060906191317]
[fix bug in pristine handling when dealing with multiple patches.
David Roundy <droundy at darcs.net>**20060731111404]
[fix ordering of operations to call pull_first_middles properly.
David Roundy <droundy at darcs.net>**20060730111409]
[make amend-record.pl test a bit pickier.
David Roundy <droundy at darcs.net>**20060730103854]
[simplify code a tad in get.
David Roundy <droundy at darcs.net>**20060726121737]
[fix bug in refactoring of get.
David Roundy <droundy at darcs.net>**20060726121655]
[refactor Population.
David Roundy <droundy at darcs.net>**20060716034837]
[add TODO for refactoring get_markedup_file.
David Roundy <droundy at darcs.net>**20060716034339]
[partial refactoring in annotate.
David Roundy <droundy at darcs.net>**20060716034319]
[don't use DarcsRepo in list_authors.
David Roundy <droundy at darcs.net>**20060716033450]
[I've now eliminated need to export DarcsRepo.write_patch.
David Roundy <droundy at darcs.net>**20060716033109]
[partially refactor Optimize.
David Roundy <droundy at darcs.net>**20060716032934]
[partial refactoring of Get.
David Roundy <droundy at darcs.net>**20060716031605]
[refactor amend-record.
David Roundy <droundy at darcs.net>**20060716021003]
[add TODO to refactor unrevert handling.
David Roundy <droundy at darcs.net>**20060716020247]
[refactor Unrecord, adding tentativelyRemovePatches.
David Roundy <droundy at darcs.net>**20060716015150]
[refactor tag.
David Roundy <droundy at darcs.net>**20060716011853]
[refactor Repository to allow truly atomic updates.
David Roundy <droundy at darcs.net>**20060716011245]
[Do not redirect to or from /dev/null when calling ssh.
Eric Kow <eric.kow at loria.fr>**20060903214831
Redirection of stdin and stdout breaks putty, which uses these to
interact with the user. Quiet mode, and redirecting stderr are good
enough for making ssh silent.
]
[Exec improvements : Windows redirection, and more redirection control.
Eric Kow <eric.kow at gmail.com>**20060707054134
- Implement ability to redirect to /dev/null under Windows
(eivuokko on #darcs points out that it is NUL under Windows)
- Add exec_ function, which does the same thing as exec,
but allows redirection on stderr, and also allows us
to NOT redirect stdin/stderr
]
[Ignore .git if _darcs found.
Juliusz Chroboczek <jch at pps.jussieu.fr>**20060831231933]
[overhaul the darcs.net front page.
Mark Stosberg <mark at summersault.com>**20060820191415
The themes to this change are:
- Focus on the key benefits of darcs:
Distributed. Interactive. Smart.
- Recognize that the wiki is the central resource,
and remove some information that is duplicated here
and reference the wik instead.
I can post a demo of this HTML for easy comparison if you'd like.
Mark
]
[Reimplement --disable-ssh-cm flag (issue239).
Eric Kow <eric.kow at gmail.com>**20060812134856
My patch to "Only launch SSH control master on demand" accidentally
removed the ability to disable use of SSH ControlMaster. Also, the
way it was implemented is not compatible with launching on demand.
This implementation relies on a notion of global variables using
unsafe IORefs.
]
[Compile Global.lhs in place of AtExit.lhs.
Eric Kow <eric.kow at gmail.com>**20060812121943]
[Rename AtExit module to Global.
Eric Kow <eric.kow at gmail.com>**20060812121925
The goal is to capture some broad "global" notions like exit handlers
and global variables. Note the GPL header thrown in for good measure.
]
[Raise exception if unable to open logfile (issue142).
Zachary P. Landau <kapheine at divineinvasion.net>**20060810034035]
[Make the pull 'permission test' work when run as root
Jon Olsson <jon at vexed.se>**20060831193834]
[TAG darcs-unstable-20060831
Juliusz Chroboczek <jch at pps.jussieu.fr>**20060831191554]
Patch bundle hash:
118d52ac7d375eaa2007d05ae9ff6275a1cb3b5d
More information about the darcs-devel
mailing list