darcs 2.4.1 → 2.4.3
raw patch · 17 files changed
+188/−116 lines, 17 filesdep +unix-compatdep ~hashed-storagenew-uploader
Dependencies added: unix-compat
Dependency ranges changed: hashed-storage
Files
- GNUmakefile +10/−1
- NEWS +22/−0
- contrib/darcs-errors.hlint +45/−0
- darcs.cabal +8/−3
- release/distributed-context +1/−1
- src/Darcs/Bug.hs +1/−1
- src/Darcs/Commands/Convert.lhs +6/−3
- src/Darcs/Commands/Optimize.lhs +2/−2
- src/Darcs/Repository.hs +6/−5
- src/Darcs/Repository/State.hs +18/−9
- src/Darcs/SlurpDirectory/Internal.hs +2/−2
- src/win32/System/Posix/Files.hsc +12/−87
- src/win32/System/Posix/IO.hsc +9/−0
- tests/EXAMPLE.sh +1/−1
- tests/issue1645-ignore-symlinks-case-fold.sh +0/−1
- tests/issue1645-ignore-symlinks.sh +1/−0
- tests/issue1837_get-partial.sh +44/−0
GNUmakefile view
@@ -8,10 +8,13 @@ PREPROCHTML=--html TEXSOURCES = src/darcs.tex $(wildcard src/*.tex) $(filter %.lhs,$(DARCS_FILES)) doc/manual/darcs.tex: $(TEXSOURCES) $(DARCS)+ mkdir -p doc/manual $(PREPROC) darcs.tex $(PREPROCHTML) >$@ doc/manual/darcs_print.tex: $(TEXSOURCES) $(DARCS)+ mkdir -p doc/manual $(PREPROC) darcs.tex >$@ doc/manual/patch-theory.tex: $(TEXSOURCES) $(UNIT_FILES) $(DARCS)+ mkdir -p doc/manual $(PREPROC) Darcs/Patch/Properties.lhs >$@ %.pdf: %.tex@@ -55,8 +58,14 @@ clean: rm -f TAGS tags- rm -f doc/manual/bigpage.tex+ rm -f doc/manual/bigpage.tex doc/manual/bigpage.css+ rm -f doc/manual/bigimg*.png doc/manual/bigimages.* rm -f doc/manual/*.html doc/manual/darcs*.??? doc/manual/darcs.lg+ rm -f doc/manual/darcs.html rm -f doc/manual/darcs.xref c_context.c doc/darcs_print.ps+ rm -f doc/manual/patch-theory.??? doc/manual/patch-theory.ps+ rm -f doc/manual/WARNINGS doc/manual/*.pl+ rm -f doc/manual/images.* doc/manual/img*.png doc/manual/*.html+ rm -f doc/manual/darcs_print.ps doc/manual/darcs.ps .PHONY: ps pdf html clean website
NEWS view
@@ -1,3 +1,25 @@+Darcs 2.4.3, 9 May 2010++ * Important changes in Darcs 2.4.3++ * darcs builds on Windows with GHC 6.12.++Darcs 2.4.2, 8 May 2010++ * Important changes in Darcs 2.4.2++ * darcs will no longer give "mmap of _darcs_index" errors on Windows+ * darcs convert performance regression (against 2.3.x) solved+ * darcs get --partial no longer produces inconsistent repositories++ * Issues resolved in Darcs 2.4.2++ * 1761: mmap of '_darcs/index' failed on Windows mapped drives+ * 1814: include contrib/darcs-errors.hlint in release tarball+ * 1823: read (mmap) _darcs/index file correctly on Windows+ * 1826: error building on Windows with GHC 6.12+ * 1837: inconsistent repository upon darcs get --partial+ Darcs 2.4.1, 31 March 2010 * Important changes in Darcs 2.4.1
+ contrib/darcs-errors.hlint view
@@ -0,0 +1,45 @@+-- Only report errors, since we use this as part of the testsuite. It needs to+-- be easy to see what tripped up the testcase.++ignore "Eta reduce" = ""+ignore "Use camelCase" = ""+ignore "Use const" = ""+ignore "Use on" = ""+ignore "Use foldr" = ""+ignore "Use String" = ""+ignore "Use string literal" = ""+ignore "Use guards" = ""+ignore "Use :" = ""+ignore "Redundant brackets" = ""+ignore "Redundant do" = ""+ignore "Redundant return" = ""+ignore "Redundant $" = ""+ignore "Redundant lambda" = ""++ignore "Use fewer imports" = ""+ignore "Use better pragmas" = ""+ignore "Use let" = ""+ignore "Operator rotate" = ""+ignore "Use foldl" = ""+ignore "Unused LANGUAGE pragma" = ""++-- The problem with Prelude readFile is that it's based on hGetContents, which+-- is lazy by definition. This also means that unless you force consumption of+-- the produced list, it will keep an fd open for the file, possibly+-- indefinitely. This is called a fd leak. Other than being annoying and if done+-- often, leading to fd exhaustion and failure to open any new files (which is+-- usually fatal), it also prevents the file to be unlinked (deleted) on win32.++-- On the other hand, *strict* bytestring version of readFile will read the whole+-- file into a contiguous buffer, *close the fd* and return. This is perfectly+-- safe with regards to fd leaks. Btw., this is *not* the case with lazy+-- bytestring variant of readFile, so that one is unsafe as well.++error "Avoid Prelude.readFile" = Prelude.readFile ==> Data.ByteString.readFile+error "Avoid hGetContents" = System.IO.hGetContents ==> Data.ByteString.hGetContents+error "Avoid BL.hGetContents" = Data.ByteString.Lazy.hGetContents+ ==> Data.ByteString.hGetContents+error "Avoid BL.hGetContents" = Data.ByteString.Lazy.Char8.hGetContents+ ==> Data.ByteString.hGetContents+error "Avoid BL.readFile" = Data.ByteString.Lazy.Char8.readFile ==> Data.ByteString.readFile+error "Avoid BL.readFile" = Data.ByteString.Lazy.readFile ==> Data.ByteString.readFile
darcs.cabal view
@@ -1,5 +1,5 @@ Name: darcs-version: 2.4.1+version: 2.4.3 License: GPL License-file: COPYING Author: David Roundy <droundy@darcs.net>, <darcs-users@darcs.net>@@ -44,6 +44,7 @@ -- The contrib directory would make a sensible 'darcs-contrib' package contrib/_darcs.zsh, contrib/darcs_completion, contrib/cygwin-wrapper.bash, contrib/update_roundup.pl, contrib/upload.cgi,+ contrib/darcs-errors.hlint, -- documentation files src/best_practices.tex, src/building_darcs.tex, src/configuring_darcs.tex,@@ -150,6 +151,7 @@ System.Posix.IO cpp-options: -DWIN32 c-sources: src/win32/send_email.c+ build-depends: unix-compat >= 0.1.2 -- ---------------------------------------------------------------------- -- darcs library@@ -314,6 +316,7 @@ System.Posix.Files System.Posix.IO cpp-options: -DWIN32+ build-depends: unix-compat >= 0.1.2 if os(solaris) cc-options: -DHAVE_SIGINFO_H@@ -325,7 +328,7 @@ html == 1.0.*, filepath == 1.1.*, haskeline >= 0.6.1 && < 0.7,- hashed-storage == 0.4.11+ hashed-storage == 0.4.13 if !os(windows) build-depends: unix >= 1.0 && < 2.5@@ -444,6 +447,7 @@ Preproc cpp-options: -DWIN32 c-sources: src/win32/send_email.c+ build-depends: unix-compat >= 0.1.2 if os(solaris) cc-options: -DHAVE_SIGINFO_H@@ -455,7 +459,7 @@ html == 1.0.*, filepath == 1.1.*, haskeline >= 0.6.1 && < 0.7,- hashed-storage == 0.4.11+ hashed-storage == 0.4.13 if !os(windows) build-depends: unix >= 1.0 && < 2.5@@ -583,6 +587,7 @@ System.Posix.IO cpp-options: -DWIN32 c-sources: src/win32/send_email.c+ build-depends: unix-compat >= 0.1.2 if os(solaris) cc-options: -DHAVE_SIGINFO_H
release/distributed-context view
@@ -1,1 +1,1 @@-Just "\nContext:\n\n[TAG 2.4.1\nReinier Lamers <tux_rocker@reinier.de>**20100412161826\n Ignore-this: 17bcd98358f6da527cd14ab1a725f0b7\n] \n"+Just "\nContext:\n\n[TAG 2.4.3\nEric Kow <kowey@darcs.net>**20100509132315\n Ignore-this: 1a920525d0cd01c352d5a2893bbea10d\n] \n"
src/Darcs/Bug.hs view
@@ -12,7 +12,7 @@ _bugDoc :: BugStuff -> Doc -> a _bugDoc bs s = errorDoc $ text ("bug at " ++ _bugLoc bs) $$ s $$- text ("See http://wiki.darcs.net/index.html/BugTrackerHowto " +++ text ("See http://wiki.darcs.net/BugTracker/Reporting " ++ "for help on bug reporting.") _bugLoc :: BugStuff -> String
src/Darcs/Commands/Convert.lhs view
@@ -44,7 +44,8 @@ slurp_recorded, optimizeInventory, tentativelyMergePatches, patchSetToPatches, createPristineDirectoryTree,- revertRepositoryChanges, finalizeRepositoryChanges )+ revertRepositoryChanges, finalizeRepositoryChanges,+ applyToWorking ) import Darcs.Global ( darcsdir ) import Darcs.Patch ( RealPatch, Patch, Named, showPatch, patch2patchinfo, fromPrims, infopatch, modernizePatch,@@ -59,7 +60,7 @@ import Darcs.Repository.Motd ( show_motd ) import Darcs.Utils ( clarifyErrors, askUser ) import Darcs.ProgressPatches ( progressFL )-import Darcs.Witnesses.Sealed ( FlippedSeal(..) )+import Darcs.Witnesses.Sealed ( FlippedSeal(..), Sealed(..) ) import Printer ( text, ($$) ) import Darcs.ColorPrinter ( traceDoc ) import Darcs.SlurpDirectory ( list_slurpy_files )@@ -199,9 +200,11 @@ (map convertInfo $ concatMap fixDep $ getdeps n) convertInfo n | n `elem` inOrderTags = n | otherwise = maybe n (\t -> pi_rename n ("old tag: "++t)) $ pi_tag n- applySome xs = do tentativelyMergePatches repository "convert" (AllowConflicts:opts) NilFL xs+ applySome xs = do Sealed pw <- tentativelyMergePatches repository "convert" (AllowConflicts:opts) NilFL xs finalizeRepositoryChanges repository -- this is to clean out pristine.hashed revertRepositoryChanges repository+ revertable $ applyToWorking repository opts pw+ invalidateIndex repository sequence_ $ mapFL applySome $ bunchFL 100 $ progressFL "Converting patch" patches invalidateIndex repository revertable $ createPristineDirectoryTree repository "."
src/Darcs/Commands/Optimize.lhs view
@@ -206,9 +206,9 @@ doOptimizePristine :: RepoPatch p => Repository p -> IO () doOptimizePristine repo = do- hashed <- doesFileExist $ "_darcs" </> "hashed_inventory"+ hashed <- doesFileExist $ darcsdir </> "hashed_inventory" when hashed $ do- inv <- BS.readFile ("_darcs" </> "hashed_inventory")+ inv <- BS.readFile (darcsdir </> "hashed_inventory") let linesInv = BS.split '\n' inv case linesInv of [] -> return ()
src/Darcs/Repository.hs view
@@ -45,7 +45,7 @@ import System.Exit ( ExitCode(..), exitWith ) -import Darcs.Repository.State( readRecorded, readUnrecorded, unrecordedChanges+import Darcs.Repository.State( readRecorded, readUnrecorded, readWorking, unrecordedChanges , readPending, pendingChanges, readIndex, invalidateIndex , readRecordedAndPending ) @@ -113,7 +113,7 @@ import Storage.Hashed.Tree( Tree, emptyTree ) import Storage.Hashed.Hash( encodeBase16 )-import Storage.Hashed.Darcs( writeDarcsHashed )+import Storage.Hashed.Darcs( writeDarcsHashed, darcsAddMissingHashes ) import Storage.Hashed( writePlainTree ) import ByteStringUtils( gzReadFilePS ) @@ -317,9 +317,10 @@ replacePristine (Repo r _opts _rf (DarcsRepository pris _c)) tree = withCurrentDirectory r $ replace pris where replace HashedPristine =- do let t = "_darcs" </> "hashed_inventory"+ do let t = darcsdir </> "hashed_inventory" i <- gzReadFilePS t- root <- writeDarcsHashed tree $ "_darcs" </> "pristine.hashed"+ tree' <- darcsAddMissingHashes tree+ root <- writeDarcsHashed tree' $ darcsdir </> "pristine.hashed" writeDocBinFile t $ pris2inv (BS.unpack $ encodeBase16 root) i replace (PlainPristine n) = do rm_recursive nold `catchall` return ()@@ -334,7 +335,7 @@ pristineFromWorking :: RepoPatch p => Repository p C(r u t) -> IO () pristineFromWorking repo@(Repo dir _ rf _) | formatHas HashedInventory rf =- withCurrentDirectory dir $ readUnrecorded repo >>= replacePristine repo+ withCurrentDirectory dir $ readWorking >>= replacePristine repo pristineFromWorking (Repo dir _ _ (DarcsRepository p _)) = withCurrentDirectory dir $ createPristineFromWorking p
src/Darcs/Repository/State.hs view
@@ -28,7 +28,7 @@ -- * Diffs. , unrecordedChanges, readPending, pendingChanges -- * Trees.- , readRecorded, readUnrecorded, readRecordedAndPending+ , readRecorded, readUnrecorded, readRecordedAndPending, readWorking -- * Index. , readIndex, invalidateIndex ) where @@ -51,6 +51,7 @@ import Darcs.Witnesses.Sealed ( Sealed(Sealed), seal ) import Darcs.Diff ( treeDiff ) import Darcs.Flags ( DarcsFlag( LookForAdds ), willIgnoreTimes )+import Darcs.Global ( darcsdir ) import Darcs.Utils ( filterPaths ) import Darcs.Repository.InternalTypes ( Repository )@@ -66,6 +67,7 @@ import Storage.Hashed.Darcs( darcsTreeHash, readDarcsHashed, decodeDarcsHash, decodeDarcsSize ) import Storage.Hashed.Hash( Hash( NoHash ) ) import qualified Storage.Hashed.Index as I+import qualified Storage.Hashed.Tree as Tree #include "gadts.h" @@ -100,7 +102,7 @@ restrictBoring :: forall t m. Tree m -> IO (FilterTree t m => t m -> t m) restrictBoring guide = do boring <- boringRegexps- let boring' (AnchoredPath (Name x:_)) | x == BSC.pack "_darcs" = False+ let boring' (AnchoredPath (Name x:_)) | x == BSC.pack darcsdir = False boring' p = not $ any (\rx -> isJust $ matchRegex rx p') boring where p' = anchorPath "" p restrictTree :: FilterTree t m => t m -> t m@@ -161,8 +163,7 @@ -- construction. readRecorded :: (RepoPatch p) => Repository p C(r u t) -> IO (Tree IO) readRecorded _repo = do- let darcs = "_darcs"- h_inventory = darcs </> "hashed_inventory"+ let h_inventory = darcsdir </> "hashed_inventory" hashed <- doesFileExist h_inventory if hashed then do inv <- BS.readFile h_inventory@@ -173,18 +174,26 @@ let hash = decodeDarcsHash $ BS.drop 9 pris_line size = decodeDarcsSize $ BS.drop 9 pris_line when (hash == NoHash) $ fail $ "Bad pristine root: " ++ show pris_line- readDarcsHashed (darcs </> "pristine.hashed") (size, hash)- else do have_pristine <- doesDirectoryExist $ darcs </> "pristine"- have_current <- doesDirectoryExist $ darcs </> "current"+ readDarcsHashed (darcsdir </> "pristine.hashed") (size, hash)+ else do have_pristine <- doesDirectoryExist $ darcsdir </> "pristine"+ have_current <- doesDirectoryExist $ darcsdir </> "current" case (have_pristine, have_current) of- (True, _) -> readPlainTree $ darcs </> "pristine"- (False, True) -> readPlainTree $ darcs </> "current"+ (True, _) -> readPlainTree $ darcsdir </> "pristine"+ (False, True) -> readPlainTree $ darcsdir </> "current" (_, _) -> fail "No pristine tree is available!" -- | Obtains a Tree corresponding to the "unrecorded" state of the repository: -- the working tree plus the "pending" patch. readUnrecorded :: (RepoPatch p) => Repository p C(r u t) -> IO (Tree IO) readUnrecorded repo = readIndex repo >>= I.updateIndex++-- | Obtains a Tree corresponding to the working copy of the+-- repository. NB. Almost always, using readUnrecorded is the right+-- choice. This function is only useful in not-completely-constructed+-- repositories.+readWorking :: IO (Tree IO)+readWorking = expand =<< (nodarcs `fmap` readPlainTree ".")+ where nodarcs = Tree.filter (\(AnchoredPath (Name x:_)) _ -> x /= BSC.pack "_darcs") readRecordedAndPending :: (RepoPatch p) => Repository p C(r u t) -> IO (Tree IO) readRecordedAndPending repo = do
src/Darcs/SlurpDirectory/Internal.hs view
@@ -69,7 +69,7 @@ import Darcs.Patch.FileName ( FileName, fn2fp, fp2fn, norm_path, break_on_dir, own_name, superName )-#if mingw32_HOST_OS+#if mingw32_HOST_OS && __GLASGOW_HASKELL__ < 612 import Data.Int ( Int64 ) #else import System.Posix.Types ( FileOffset )@@ -77,7 +77,7 @@ #include "impossible.h" -#if mingw32_HOST_OS+#if mingw32_HOST_OS && __GLASGOW_HASKELL__ < 612 type FileOffset = Int64 #endif
src/win32/System/Posix/Files.hsc view
@@ -1,96 +1,21 @@ {-# OPTIONS_GHC -cpp #-}-module System.Posix.Files where--import Foreign.Marshal.Alloc ( allocaBytes )-import Foreign.C.Error ( throwErrnoIfMinus1Retry, throwErrnoPathIf_ )-import Foreign.C.String ( withCString, withCWString, CWString )-import Foreign.C.Types ( CTime, CInt )-import Foreign.Ptr ( Ptr, nullPtr )--import System.Posix.Internals- ( FDType, CStat, c_fstat, lstat, - sizeof_stat, statGetType, - st_mode, st_size, st_mtime,- s_isreg, s_isdir, s_isfifo, c_stat )-import System.Posix.Types ( Fd(..), CMode, EpochTime, FileMode )--import Data.Bits ( (.|.) )--#if mingw32_HOST_OS-import Data.Int ( Int64 )-#else-import System.Posix.Types ( FileOffset )-#endif--##if mingw32_HOST_OS-type FileOffset = Int64-##endif--data FileStatus = FileStatus {- fst_type :: FDType,- fst_mode :: CMode,- fst_mtime :: CTime,- fst_size :: FileOffset- }--getFdStatus :: Fd -> IO FileStatus-getFdStatus (Fd fd) = do- do_stat (c_fstat fd)--do_stat :: (Ptr CStat -> IO CInt) -> IO FileStatus-do_stat stat_func = do- allocaBytes sizeof_stat $ \p -> do- throwErrnoIfMinus1Retry "do_stat" $- stat_func p- tp <- statGetType p- mode <- st_mode p- mtime <- st_mtime p- size <- st_size p- return (FileStatus tp mode mtime (fromIntegral size))--isNamedPipe :: FileStatus -> Bool-isNamedPipe = s_isfifo . fst_mode--isDirectory :: FileStatus -> Bool-isDirectory = s_isdir . fst_mode+module System.Posix.Files( isNamedPipe, isDirectory, isRegularFile, isSymbolicLink+ , getFdStatus, getFileStatus, getSymbolicLinkStatus+ , modificationTime, setFileMode, fileSize, fileMode+ , stdFileMode, linkCount, createLink ) where -isRegularFile :: FileStatus -> Bool-isRegularFile = s_isreg . fst_mode+import System.PosixCompat.Files( isNamedPipe, isDirectory, isRegularFile, isSymbolicLink+ , getFdStatus, getFileStatus, getSymbolicLinkStatus+ , modificationTime, setFileMode, fileSize, fileMode+ , stdFileMode, FileStatus ) -isSymbolicLink :: FileStatus -> Bool-isSymbolicLink = const False+import Foreign.C.String( CWString, withCWString )+import Foreign.C.Error( throwErrnoPathIf_ )+import Foreign.Ptr( Ptr, nullPtr )+import Foreign.C( CInt ) linkCount :: FileStatus -> Int linkCount _ = 1--modificationTime :: FileStatus -> EpochTime-modificationTime = fst_mtime--fileSize :: FileStatus -> FileOffset-fileSize = fst_size--fileMode :: a -> ()-fileMode _ = ()--setFileMode :: FilePath -> () -> IO ()-setFileMode _ _ = return ()--#include <sys/stat.h>-stdFileMode :: FileMode-stdFileMode = (#const S_IRUSR) .|. (#const S_IWUSR)--getFileStatus :: FilePath -> IO FileStatus-getFileStatus fp =- do_stat (\p -> (fp `withCString` (`c_stat` p)))---- lstat is broken on win32 with at least GHC 6.10.3-getSymbolicLinkStatus :: FilePath -> IO FileStatus-##if mingw32_HOST_OS-getSymbolicLinkStatus = getFileStatus-##else-getSymbolicLinkStatus fp =- do_stat (\p -> (fp `withCString` (`lstat` p)))-##endif #define _WIN32_WINNT 0x0500 foreign import stdcall "winbase.h CreateHardLinkW" c_CreateHardLink :: CWString -> CWString -> Ptr a -> IO CInt
src/win32/System/Posix/IO.hsc view
@@ -1,6 +1,11 @@ module System.Posix.IO where +#if mingw32_HOST_OS && __GLASGOW_HASKELL__ >= 612+import Foreign.C.String( withCWString )+#else import Foreign.C.String ( withCString )+#endif+ import Foreign.C.Error ( throwErrnoIfMinus1, throwErrnoIfMinus1_ ) import GHC.Handle ( fdToHandle )@@ -33,7 +38,11 @@ openFd :: FilePath -> OpenMode -> Maybe FileMode -> OpenFileFlags -> IO Fd openFd name how maybe_mode off = do+#if mingw32_HOST_OS && __GLASGOW_HASKELL__ >= 612+ withCWString name $ \s -> do+#else withCString name $ \s -> do+#endif fd <- throwErrnoIfMinus1 "openFd" (c_open s all_flags mode_w) return (Fd fd) where
tests/EXAMPLE.sh view
@@ -24,7 +24,7 @@ ## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ## SOFTWARE. -. ../tests/lib # Load some portability helpers.+. lib # Load some portability helpers. rm -rf R S # Another script may have left a mess. darcs init --repo R # Create our test repos. darcs init --repo S
tests/issue1645-ignore-symlinks-case-fold.sh view
@@ -60,7 +60,6 @@ darcs w -l >log 2>&1 # should report only "non-recorded-file" darcs rec -alm "added ./non-recorded-file2" >>log 2>&1 # should add only file, not symlink darcs changes -s --patch="added ./non-recorded-file2" >>log 2>&1 # should report only file, not symlink-cat log not grep -vE "(^ *$|^\+|[0-9]:[0-9][0-9]:[0-9]|./non-recorded-file2)" log rm Non-Recorded-File2 ./Non-ReCoRdEd-File2
tests/issue1645-ignore-symlinks.sh view
@@ -48,6 +48,7 @@ add_to_boring '^log$' unset pwd # Since this test is pretty much linux-specific, hspwd.hs is not needed+abort_windows # and skip if we are on win32... # Case 1: looping symlink to non-recorded non-boring dir mkdir non-recorded-dir
+ tests/issue1837_get-partial.sh view
@@ -0,0 +1,44 @@+#!/usr/bin/env bash+## Test for issue1837 - darcs get --partial should produce a+## consistent repository+##+## Copyright (C) 2010 Petr Rockai+## Copyright (C) 2010 Eric Kow+##+## Permission is hereby granted, free of charge, to any person+## obtaining a copy of this software and associated documentation+## files (the "Software"), to deal in the Software without+## restriction, including without limitation the rights to use, copy,+## modify, merge, publish, distribute, sublicense, and/or sell copies+## of the Software, and to permit persons to whom the Software is+## furnished to do so, subject to the following conditions:+##+## The above copyright notice and this permission notice shall be+## included in all copies or substantial portions of the Software.+##+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+## SOFTWARE.++# not relevant to old-fashioned+if grep old-fashioned .darcs/defaults; then exit 200; fi++. lib # Load some portability helpers.+rm -rf R S # Another script may have left a mess.++tar xzf repos/old-with-checkpoint.tgz++darcs get old-with-checkpoint R+cd R+ darcs check+cd ..++darcs get --partial old-with-checkpoint S+cd S+ darcs check+cd ..