packages feed

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 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
@@ -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 ..