[darcs-devel] Re: [PR#99]: patch for review.

Karel Gardas kgardas at objectsecurity.com
Tue Dec 28 15:15:06 PST 2004


On Wed, 15 Dec 2004, David Roundy wrote:

> On Wed, Dec 15, 2004 at 09:19:17PM +0100, Karel Gardas wrote:
> > On Wed, 15 Dec 2004, David Roundy wrote:
> > > I know you're not finished, but eventually I'd prefer to have just
> > > slurp_write and slurp_write_dirty.  The fewer functions we export, the
> > > better.
> >
> > No problem, but this will basically means to touch quite a lot of code in
> > darcs to change slurp API usage, i.e. I need to add your prefered
> > [DarcsFlag] as a first param to these functions. If you don't mind it,
> > then I will of course do it.
>
> That's fine.  You can just pass an empty list in places where SetShebang
> isn't supported, and it'll be there as a reminder that those are commands
> that don't yet support shebang executables.  Or I suppose you could pass in
> opts, even when it can't possibly have a SheBang in it.  Either way.

I've decided to go with minimalistic implementation at the end and so
sending empty list where option is not supported. My second attempt
enhancing just `get' command is attached. I've also added FileSystem
module as you have suggested, switched to use MultipleChoiceOption and
changed the option name to --set-unix-scripts-executable.

Thanks for your review,
Karel
--
Karel Gardas                  kgardas at objectsecurity.com
ObjectSecurity Ltd.           http://www.objectsecurity.com

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


New patches:

[add FileSystem module with basic implementation of make_executable function
Karel Gardas <kgardas at objectsecurity.com>**20041228114555
 This patch adds FileSystem module which is intended to provide various
 file system related functions and hide under-laying OS
 functionality. Currently only `make_executable' function is provided
 which makes file executable for its owner and owner group on
 Unix(-like) OSes and does nothing on Win32 OSes.
]
<
> {
addfile ./FileSystem.hs
hunk ./FileSystem.hs 1
+-- Copyright (C) 2004 Karel Gardas
+--
+-- 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; if not, write to the Free Software Foundation,
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+module FileSystem ( make_executable ) where
+
+--
+-- This module is intended to provide various filesystem related
+-- functions and to hide under-laying OS functionality
+--
+
+#ifndef WIN32
+#if __GLASGOW_HASKELL__ < 603
+import Posix
+#else
+import System.Posix
+#endif
+             ( getFileStatus, setFileMode, unionFileModes, ownerExecuteMode, groupExecuteMode, fileMode )
+#endif
+
+make_executable :: FilePath -> IO ()
+
+#ifndef WIN32
+make_executable fp = do
+                     stat <- getFileStatus fp
+                     setFileMode fp (unionFileModes (unionFileModes (fileMode stat) ownerExecuteMode) groupExecuteMode)
+#else
+make_executable _ = return ()
+#endif
+
hunk ./GNUmakefile 29
 	PrintPatch.lhs Printer.lhs RegChars.lhs RepoPrefs.lhs		\
 	RepoTypes.lhs Repository.lhs Resolution.lhs SHA1.lhs		\
 	SignalHandler.lhs SlurpDirectory.lhs Test.lhs UTF8.lhs		\
- -	Workaround.hs Zlib.lhs
+	Workaround.hs Zlib.lhs FileSystem.hs

 DARCS_FILES := $(COMMON_FILES) Add.lhs AmendRecord.lhs	\
 	Annotate.lhs Apply.lhs		\
}

[add --set-unix-scripts-executable and --donot-set-unix-scripts-executable options support
Karel Gardas <kgardas at objectsecurity.com>**20041228123330]
<
> {
hunk ./DarcsArguments.lhs 56
                         happy_forwarding,
                         set_default,
                         fancy_move_add,
+                        set_unix_scripts_executable,
                         (///),
                       ) where
 import System.Console.GetOpt
hunk ./DarcsArguments.lhs 866
 show_long_options [s] = "\\verb!--" ++ s ++ "! &"
 show_long_options (s:ss)
     = "\\verb!--" ++ s ++ "!,"++ show_long_options ss
+
+set_unix_scripts_executable :: DarcsOption
+set_unix_scripts_executable = DarcsMultipleChoiceOption
+                              [DarcsNoArgOption ['e'] ["set-unix-scripts-executable"] SetUnixScriptsExecutable
+                               "make Unix scripts executable",
+                               DarcsNoArgOption [] ["donot-set-unix-scripts-executable"] DoNotSetUnixScriptsExecutable
+                               "do not make Unix scripts executable"]
+
 \end{code}

hunk ./DarcsFlags.lhs 61
                | NonApply | NonVerify | NonForce
                | DryRun | SetDefault | NoSetDefault
                | FancyMoveAdd | NoFancyMoveAdd
- -               | Disable
+               | Disable | SetUnixScriptsExecutable | DoNotSetUnixScriptsExecutable
                  deriving ( Eq, Show )
 \end{code}

}

[enhance slurp write related and repository apply_patches functions to support executable scripts
Karel Gardas <kgardas at objectsecurity.com>**20041228212713
 This patch enhances slurp write related functions and repository
 apply_patches function to make Unix scripts executable if appropriate
 -e/--set-unix-scripts-executable option is used.
]
<
> {
hunk ./Apply.lhs 182
                   wait_a_moment -- so work will be more recent than rec
                   sequence $ map (add_to_inventory ".".fromJust.patch2patchinfo)
                            to_be_applied
- -                  slurp_write_dirty work'
+                  slurp_write_dirty [] work'
                   unless (isNothing mp && pw_resolved `eq_patches` us_patch) $
                        write_pending $ join_patches
                            [invert us_patch, fromMaybePatch mp, pw_resolved]
hunk ./Check.lhs 110
             case patch2patchinfo chk of
             Just chtg -> do
                 putVerbose $ text "I am checking from a checkpoint."
- -                apply_patches putVerbose putInfo $ (chtg, Just chk)
+                apply_patches [] putVerbose putInfo $ (chtg, Just chk)
                     : reverse (concat $ get_patches_beyond_tag chtg patches)
             Nothing -> impossible
hunk ./Check.lhs 113
- -        Nothing -> apply_patches putVerbose putInfo $ reverse $ concat patches
+        Nothing -> apply_patches [] putVerbose putInfo $ reverse $ concat patches
     is_same <-
         withCurrentDirectory cwd $ (identifyCurrent >>= checkCurrent chd)
     if is_same
hunk ./Current.lhs 95
 writeCurrent _ NoCurrent = return ()
 writeCurrent cur PlainCurrent =
     withCurrentDirectory "_darcs/current" $
- -        slurp_write cur
+        slurp_write [] cur
 writeCurrent _ HashedCurrent =
     fail "HashedCurrent is not implemented yet."

hunk ./Current.lhs 103
 write_dirty_Current _ NoCurrent = return ()
 write_dirty_Current cur PlainCurrent =
     withCurrentDirectory "_darcs/current" $
- -        slurp_write_dirty cur
+        slurp_write_dirty [] cur
 write_dirty_Current _ HashedCurrent =
     fail "HashedCurrent is not implemented yet."

hunk ./DiffCommand.lhs 129
       do if first_match opts
             then get_first_match formerdir opts
             else do recorded <- slurp_recorded formerdir
- -                    slurp_write recorded
+                    slurp_write [] recorded
     withCurrentDirectory ndir $
       do if second_match opts
             then get_second_match formerdir opts
hunk ./DiffCommand.lhs 134
             else do (_,latest) <- slurp_recorded_and_unrecorded formerdir
- -                    slurp_write latest
+                    slurp_write [] latest
     thediff <- withCurrentDirectory (odir ++ "/..") $
                    case map (fix_filepath opts) args of
                    [] -> rundiff (just_dir odir) (just_dir ndir)
hunk ./Dist.lhs 89
   formerdir <- getCurrentDirectory
   withTemp $ \tarfile ->
    withTempDir dn $ \ddir -> do
- -    slurp_write recorded
+    slurp_write [] recorded
     case predist of Nothing -> return ExitSuccess
                     Just pd -> system pd
     setCurrentDirectory (ddir++"/..")
hunk ./Get.lhs 137
        copyFileOrUrl
           (repodir++"/_darcs/prefs/prefs") "_darcs/prefs/prefs" (MaxAge 600)
           `catchall` return ()
- -       slurp_write s
+       slurp_write [] s
        s' <- slurp_recorded repodir
        identifyCurrent >>= writeCurrent s'
      else do
hunk ./Get.lhs 150
                                     reverse $ concat local_patches
                    in do write_checkpoint_patch p_ch
                          case apply_to_slurpy p_ch empty_slurpy of
- -                             Just s -> slurp_write_dirty s
+                             Just s -> slurp_write_dirty [] s
                              Nothing -> fail "Bad checkpoint!"
hunk ./Get.lhs 152
- -                         apply_patches putVorDot putInfo needed_patches
- -          else apply_patches putVorDot putInfo
+                         apply_patches [] putVorDot putInfo needed_patches
+          else apply_patches [] putVorDot putInfo
                    $ reverse $ concat local_patches
        finishDots
        s <- mmap_slurp_all_but_darcs "."
hunk ./Get.lhs 246
            _ -> errorDoc $ text "Missing these patches from context:"
                         $$ (vcat $ map (human_friendly.fst) $ head them')
        write_inventory "." context
- -       apply_patches putVerbose putInfo $ map invert_it $ head us'
+       apply_patches [] putVerbose putInfo $ map invert_it $ head us'
        removeCurrent cur
        createCurrent (Just cur)
        s <- mmap_slurp_all_but_darcs "."
hunk ./Match.lhs 289
 get_matcher r m = do s <- slurp_recorded r
                      repo <- read_repo r
                      if match_exists m repo
- -                        then do slurp_write s
+                        then do slurp_write [] s
                                 apply_foo repo s
                         else fail $ "Couldn't match pattern "++ show m
     where apply_foo [] _ = impossible
hunk ./Match.lhs 303
     do s <- slurp_recorded r
        repo <- read_repo r
        if match_exists m repo
- -          then do slurp_write s
+          then do slurp_write [] s
                   apply_foo repo s
                   return ()
           else fail $ "Couldn't match pattern "++ show m
hunk ./Match.lhs 315

 apply_invp :: (PatchInfo, Maybe Patch) -> Slurpy -> IO Slurpy
 apply_invp p s = case apply_to_slurpy (invert $ fromJustP p) s of
- -                 Just s'-> slurp_write_and_read_dirty s'
+                 Just s'-> slurp_write_and_read_dirty [] s'
                  Nothing -> errorDoc $ text "Inverse patch failed!"
                                     $$ (human_friendly $ fst p)
     where fromJustP (_, Just pa) = pa
hunk ./Match.lhs 329

 get_dropn :: String -> Int -> IO ()
 get_dropn r n = do s <- slurp_recorded r
- -                   slurp_write s
+                   slurp_write [] s
                    repo <- read_repo r
hunk ./Match.lhs 331
- -                   apply_patches silently silently $
+                   apply_patches [] silently silently $
                                  map invit $ safetake n $ concat repo
     where invit (pinf, Nothing) = (pinf, Nothing)
           invit (pinf, Just p) = (pinf, Just $ invert p)
hunk ./Match.lhs 348
     let pinfo = fromJust $ patch2patchinfo $ find_a_patch match ps
     s <- slurp_recorded r
     case get_patches_beyond_tag pinfo ps of
- -        [extras] -> do slurp_write s
- -                       apply_patches noPut noPut $ map invert_it extras
+        [extras] -> do slurp_write [] s
+                       apply_patches [] noPut noPut $ map invert_it extras
         _ -> impossible
     where noPut _ = return ()
           invert_it (pin, Just p) = (pin, Just $ invert p)
hunk ./Pull.lhs 190
                   wait_a_moment -- so work will be more recent than rec
                   sequence $ map (add_to_inventory ".".fromJust.patch2patchinfo)
                            to_be_pulled
- -                  slurp_write_dirty work'
+                  slurp_write_dirty [] work'
                   unless (isNothing mp && pw_resolved `eq_patches` pc) $
                        write_pending $ join_patches
                            [invert pc, fromMaybePatch mp, pw_resolved]
hunk ./Repair.lhs 89
             Just chtg -> do
                 when (Verbose `elem` opts) $
                      putStrLn "I am repairing from a checkpoint."
- -                apply_patches putVerbose putInfo $ (chtg, Just chk)
+                apply_patches [] putVerbose putInfo $ (chtg, Just chk)
                     : reverse (concat $ get_patches_beyond_tag chtg patches)
             Nothing -> fail "Bug in repair_cmd, please report."
hunk ./Repair.lhs 92
- -        Nothing -> apply_patches putVerbose putInfo
+        Nothing -> apply_patches [] putVerbose putInfo
                    $ reverse $ concat patches
     -- withTempDir ignores error on delete -- hence the hack below.
     setCurrentDirectory formerdir
hunk ./Replace.lhs 134
     Nothing -> fail $ "Can't do replace on working!\n"++
                       "Perhaps one of the files already contains '"++
                       new++"'?"
- -    Just w' -> slurp_write_dirty w'
+    Just w' -> slurp_write_dirty [] w'
   pend <- read_pending
   write_pending $ join_patches $
       maybe [] flatten pend ++ fst (unzip ps_and_pswork)
hunk ./Repository.lhs 251
            -- strict version of slurp, or a delayed version of withTempDir
            -- (that only deletes the directory when darcs terminates).
            withPermDir "current.temp" $ \cd -> do
- -               apply_patches noPut noPut $ reverse $ concat patches
+               apply_patches [] noPut noPut $ reverse $ concat patches
                mmap_slurp cd
              where noPut _ = return ()

hunk ./Repository.lhs 551
     s <- slurp_recorded "."
     case get_patches_beyond_tag pinfo ps of
         [extras] -> withTempDir "checkpoint" $ \_ -> do
- -                    slurp_write s
- -                    apply_patches noPut noPut $ map invert_it extras
+                    slurp_write [] s
+                    apply_patches [] noPut noPut $ map invert_it extras
                     job
         _ -> bug "with_tag"
     where noPut _ = return ()
hunk ./Repository.lhs 586
 \end{code}

 \begin{code}
- -apply_patches :: (Doc -> IO ()) -> (Doc -> IO ())
+apply_patches :: [DarcsFlag] -> (Doc -> IO ()) -> (Doc -> IO ())
               -> [(PatchInfo, Maybe Patch)] -> IO ()
hunk ./Repository.lhs 588
- -apply_patches _ _ [] = return ()
- -apply_patches putVerbose putInfo patches = do
+apply_patches _ _ _ [] = return ()
+apply_patches opts putVerbose putInfo patches = do
   sl <- mmap_slurp "."
   aps sl patches
   return ()
hunk ./Repository.lhs 601
                                    putInfo $ human_friendly pinfo
                                    fail "Unapplicable patch!"
                      Just s' -> do putVerbose $ text "Patch applies cleanly..."
- -                                   s'' <- slurp_write_and_read_dirty s'
+                                   s'' <- slurp_write_and_read_dirty opts s'
                                    --slurp_write_dirty s'
                                    --s'' <- mmap_slurp "."
                                    aps s'' ps
hunk ./Resolution.lhs 116
          setCurrentDirectory former_dir
          withTempDir "version2" $ \d2 -> do
            setCurrentDirectory d1
- -           slurp_write s1
+           slurp_write [] s1
            setCurrentDirectory da
hunk ./Resolution.lhs 118
- -           slurp_write sa
+           slurp_write [] sa
            setCurrentDirectory d2
hunk ./Resolution.lhs 120
- -           slurp_write s2
+           slurp_write [] s2
            setCurrentDirectory dm
hunk ./Resolution.lhs 122
- -           slurp_write sm
+           slurp_write [] sm
            let nms = list_conflicted_files pmerged
                nas = map (apply_to_filepath $ invert pmerged) nms
                n1s = map (apply_to_filepath p1) nas
hunk ./Resolve.lhs 87
                  when (yorn /= 'y') $ exitWith ExitSuccess
                  case apply_to_slurpy (invert p) work of
                    Nothing -> bug "Can't undo pending changes!"
- -                   Just work' -> slurp_write_dirty work'
+                   Just work' -> slurp_write_dirty [] work'
                  sync_repo
   work <- slurp_unrecorded
   case apply_to_slurpy res work of
hunk ./Resolve.lhs 92
     Nothing -> bug "Problem resolving conflicts in resolve!"
- -    Just work' -> withSignalsBlocked $ do slurp_write_dirty work'
+    Just work' -> withSignalsBlocked $ do slurp_write_dirty [] work'
                                           write_pending res
                                           putStrLn "Finished resolving."
   where slurp_unrecorded = do cur <- slurp_pending "."
hunk ./Revert.lhs 112
                Just working ->
                    do write_unrevert (join_patches skipped) p rec
                       withSignalsBlocked $
- -                          do slurp_write_dirty working
+                          do slurp_write_dirty [] working
                              write_pending $ join_patches skipped
              sync_repo
              putStrLn "Finished reverting."
hunk ./SlurpDirectory.lhs 74
                 )
 import Lock ( writeToFile )
 import DarcsUtils ( catchall )
+import DarcsFlags ( DarcsFlag (SetUnixScriptsExecutable) )
+import FileSystem ( make_executable )
 #include "impossible.h"

 data Slurpy = SlurpDir FileName (Maybe (IO ())) [Slurpy]
hunk ./SlurpDirectory.lhs 511
 Code to output the dirty files from a slurpy.

 \begin{code}
- -slurp_write :: Slurpy -> IO ()
- -slurp_write (SlurpDir d p ss) = block $
+slurp_write :: [DarcsFlag] -> Slurpy -> IO ()
+slurp_write opts (SlurpDir d p ss) = block $
   do isdir <- doesDirectoryReallyExist $ fn2fp d
      unless isdir (createDirectory $ fn2fp d)
      withCurrentDirectory (fn2fp d) $
hunk ./SlurpDirectory.lhs 517
        do runpatch p
- -          sequence_ $ map slurp_write ss
- -slurp_write (SlurpFile f dirt (mt,_) ls) =
+          sequence_ $ map (slurp_write opts) ss
+slurp_write opts (SlurpFile f dirt (mt,_) ls) =
     do writeContents f ls
        when (not dirt) $ setModTime f mt
hunk ./SlurpDirectory.lhs 521
+       if (SetUnixScriptsExecutable `elem` opts)
+          then mark_exec f ls
+          else return ()
+
+mark_exec :: FileName -> FileContents -> IO ()
+mark_exec f ls =
+    do let fl = unpackPS (head (readAntiMemo (fst ls)))
+	   fp = fn2fp f
+	   in
+	   if length fl > 2 && ((head fl) == '#') && ((head (tail fl)) == '!')
+	   then make_executable fp
+	   else return ()
+

 setModTime :: FileName -> EpochTime -> IO ()
 setModTime _ ctime | ctime == undefined_time = return ()
hunk ./SlurpDirectory.lhs 560
 Nothing `thendo` p = Just p
 (Just a) `thendo` b = Just $ a >> b

- -slurp_write_dirty :: Slurpy -> IO ()
- -slurp_write_dirty (SlurpDir d p ss) = block $
+slurp_write_dirty :: [DarcsFlag] -> Slurpy -> IO ()
+slurp_write_dirty opts (SlurpDir d p ss) = block $
   withCurrentDirectory (fn2fp d) $
     do runpatch p
hunk ./SlurpDirectory.lhs 564
- -       sequence_ $ map slurp_write_dirty ss
+       sequence_ $ map (slurp_write_dirty opts) ss

hunk ./SlurpDirectory.lhs 566
- -slurp_write_dirty (SlurpFile f dirt _ ls)
+slurp_write_dirty opts (SlurpFile f dirt _ ls)
     | dirt == False = return ()
hunk ./SlurpDirectory.lhs 568
- -    | otherwise = writeContents f ls
+    | otherwise = do
+                  writeContents f ls
+                  if (SetUnixScriptsExecutable `elem` opts)
+                     then mark_exec f ls
+                     else return ()

hunk ./SlurpDirectory.lhs 574
- -slurp_write_and_read_dirty :: Slurpy -> IO Slurpy
- -slurp_write_and_read_dirty (SlurpDir d Nothing ss) =
+slurp_write_and_read_dirty :: [DarcsFlag] -> Slurpy -> IO Slurpy
+slurp_write_and_read_dirty opts (SlurpDir d Nothing ss) =
   block $
     do ss' <- withCurrentDirectory (fn2fp d) $
hunk ./SlurpDirectory.lhs 578
- -                (sequence $ map slurp_write_and_read_dirty ss)
+                (sequence $ map (slurp_write_and_read_dirty opts) ss)
        return $ SlurpDir d nopatch ss'
hunk ./SlurpDirectory.lhs 580
- -slurp_write_and_read_dirty s@(SlurpDir d _ _)
- -    = do withCurrentDirectory (fn2fp d) $ slurp_write_dirty s
+slurp_write_and_read_dirty opts s@(SlurpDir d _ _)
+    = do withCurrentDirectory (fn2fp d) $ slurp_write_dirty opts s
          mmap_slurp $ fn2fp d
hunk ./SlurpDirectory.lhs 583
- -slurp_write_and_read_dirty s@(SlurpFile _ False _ _) = return s
- -slurp_write_and_read_dirty (SlurpFile f True _ ls)
+slurp_write_and_read_dirty _ s@(SlurpFile _ False _ _) = return s
+slurp_write_and_read_dirty _ (SlurpFile f True _ ls)
     = do writeContents f ls
          mmap_slurp (fn2fp f)

hunk ./Test.lhs 86
      case testline of
      Nothing -> return ExitSuccess
      Just _ -> do
- -       slurp_write $ launder_slurpy s
+       slurp_write [] $ launder_slurpy s
        setCurrentDirectory formerdir
        ec <- run_test opts td
        if ec == ExitSuccess
hunk ./TrackDown.lhs 87
                  return $ (system init, system cmd)
           _ -> fail "Trackdown expects zero to two arguments."
   withTempDir "trackingdown" $ \_ -> do
- -    slurp_write current
+    slurp_write [] current
     init
     track_next test $ map (invert . fromJust . snd) $ concat patches
 \end{code}
hunk ./TrackDown.lhs 103
             Nothing -> do putStrLn "Bad patch:"
                           putDocLn $ human_friendly $
                                    fromJust $ patch2patchinfo $ invert p
- -            Just here' -> do slurp_write_dirty here'
+            Just here' -> do slurp_write_dirty [] here'
                              putStrLn "Trying without the patch:"
                              putDocLn $ human_friendly $
                                       fromJust $ patch2patchinfo $ invert p
hunk ./Unrecord.lhs 222
                 patches' <- read_repo "."
                 write_inventory "." $ rempatch p patches'
                 identifyCurrent >>= write_dirty_Current rec'
- -                slurp_write_dirty work'
+                slurp_write_dirty [] work'
                 write_pending pend'
                 sync_repo
                 putStrLn "Finished unpulling."
hunk ./Unrevert.lhs 106
                                Just pending -> join_patches (pending : p)
               withSignalsBlocked $
                 do write_unrevert pend_and_p skipped rec
- -                   slurp_write_dirty work'
+                   slurp_write_dirty [] work'
                    write_pending pend_and_p
               sync_repo
               putStrLn "Finished unreverting."
}

[enhance `get' command to support --set/donot-set-unix-scripts-executable options
Karel Gardas <kgardas at objectsecurity.com>**20041228222948]
<
> {
hunk ./Get.lhs 31
 import DarcsArguments ( DarcsFlag( RepoName, Partial,
                                    Verbose, Quiet, Context ),
                         any_verbosity, partial, reponame,
- -                        match_one_context, set_default,
+                        match_one_context, set_default, set_unix_scripts_executable
                       )
 import Repository ( read_repo, write_inventory,
                     write_checkpoint_patch, mmap_slurp_all_but_darcs,
hunk ./Get.lhs 98
                                             partial,
                                             match_one_context,
                                             any_verbosity,
- -                                            set_default]}
+                                            set_default,
+                                            set_unix_scripts_executable]}
 \end{code}
 \begin{code}
 get_cmd :: [DarcsFlag] -> [String] -> IO ()
hunk ./Get.lhs 138
        copyFileOrUrl
           (repodir++"/_darcs/prefs/prefs") "_darcs/prefs/prefs" (MaxAge 600)
           `catchall` return ()
- -       slurp_write [] s
+       slurp_write opts s
        s' <- slurp_recorded repodir
        identifyCurrent >>= writeCurrent s'
      else do
hunk ./Get.lhs 151
                                     reverse $ concat local_patches
                    in do write_checkpoint_patch p_ch
                          case apply_to_slurpy p_ch empty_slurpy of
- -                             Just s -> slurp_write_dirty [] s
+                             Just s -> slurp_write_dirty opts s
                              Nothing -> fail "Bad checkpoint!"
hunk ./Get.lhs 153
- -                         apply_patches [] putVorDot putInfo needed_patches
- -          else apply_patches [] putVorDot putInfo
+                         apply_patches opts putVorDot putInfo needed_patches
+          else apply_patches opts putVorDot putInfo
                    $ reverse $ concat local_patches
        finishDots
        s <- mmap_slurp_all_but_darcs "."
hunk ./Get.lhs 247
            _ -> errorDoc $ text "Missing these patches from context:"
                         $$ (vcat $ map (human_friendly.fst) $ head them')
        write_inventory "." context
- -       apply_patches [] putVerbose putInfo $ map invert_it $ head us'
+       apply_patches opts putVerbose putInfo $ map invert_it $ head us'
        removeCurrent cur
        createCurrent (Just cur)
        s <- mmap_slurp_all_but_darcs "."
}



Context:

[Reorganize breakup of Patch to avoid circular dependencies.
David Roundy <droundy at abridgegame.org>**20041221141512]
[resolve conflict with whitespace change.
David Roundy <droundy at abridgegame.org>**20041221130035]
[Rejig patch headings so documentation makes some sense again
Ian Lynagh <igloo at earth.li>**20041217174449]
[Merge changes
Ian Lynagh <igloo at earth.li>**20041217165950]
[Split Patch up more. Unfortunately needs a .hi-boot file.
Ian Lynagh <igloo at earth.li>**20041211024030]
[disallow accidently pushing to the current repo
Mark Stosberg <mark at summersault.com>**20041219172359]
[Test for pulling from current repo before setting it as the default
Mark Stosberg <mark at summersault.com>**20041219171533]
[Some more tests for push.
Mark Stosberg <mark at summersault.com>**20041219163241]
[provide better stripCr implementation
Will <will at glozer.net>**20041219031418]
[add konquerer workaround to cgi annotate
Will <will at glozer.net>**20041219024435]
[use fail when possible for errors.
David Roundy <droundy at abridgegame.org>**20041218153234]
[address #114 - provide a better error when you accidently try to pull from yourself
Mark Stosberg <mark at summersault.com>**20041218025451

 This was my first real experiment with Haskell, so someone who knows better
 will probably want to rewrite it. :)

 Also, this only addresses the 'pull' case. It may be better put this logic in a
 shared routine, so it be used by 'push' and elsewhere.
]
[remove trailing whitespace
simons at cryp.to**20041218004144]
[don't import type 'Patch' twice
simons at cryp.to**20041218004106]
[remove duplicate imports (error in ghc-6.3)
simons at cryp.to**20041218002402]
[avoid conflicts by importing only 'bug' from DarcsUtils
simons at cryp.to**20041218002301]
[Fix manual to state 'darcs get' has --tag, not --tag-name
zander at kde.org**20041217153547]
[strip trailing CR in pref files
Will <will at glozer.net>**20041216073907]
[fix typo in mingw reference
Lode Leroy <lode_leroy at hotmail.com>**20041202131840]
[fix bug that left junk equal to identity patch in pending.
David Roundy <droundy at abridgegame.org>**20041215134337]
[typo fix
Mark Stosberg <mark at summersault.com>**20041215023027]
[removing Amending patches from basic documentation
Mark Stosberg <mark at summersault.com>**20041106030942

 I really like this clear description of what Amend record is actually doing.
 I've submitted a patch to the stable repo to merge some of the wording here
 into the (currently sparse) docs for admend-record.

 Amend-record is a more advanced, dangerous command which doesn't belong in a
 "Basics" section, so I removed it here.
]
[improve documentation clarity
Mark Stosberg <mark at summersault.com>**20041106030733]
[improve formatting of 'working' and 'current'
Mark Stosberg <mark at summersault.com>**20041106030657]
[documentation, basics on creating patches
Tommy Pettersson <ptp at lysator.liu.se>**20041103111151]
[update webpage to say 1.0.1 is latest stable source now.
David Roundy <droundy at abridgegame.org>**20041214134854]
[TAG 1.0.1
David Roundy <droundy at abridgegame.org>**20041214131758]

Patch bundle hash:
827aae3a9b5b91c60e8433dba6be3cc2e67d7fcb
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: http://www.mico.org/~karel/kgardas_at_objectsecurity_dot_com.gpg

iD8DBQFB0eZAqREvenJ7UIYRAoC3AKCDnnHFLqQ2ijpwuC1F0QeGtr34+gCeNHhp
78fn8ch01rB5x3p5ed62rfk=
=UXpe
-----END PGP SIGNATURE-----





More information about the darcs-devel mailing list