As requested (plus dependencies):

Tue Mar 21 00:52:00 CET 2006  Eric Kow <[EMAIL PROTECTED]>
  * More detailed comments for SSH control master.

Tue Mar 21 00:52:17 CET 2006  Eric Kow <[EMAIL PROTECTED]>
  * Add a flag to disable use of SSH control master.

New patches:

[Refactor calls to ssh.
Eric Kow <[EMAIL PROTECTED]>**20060317214816
 
 Also, separate out the argument for the remote address in some calls.
 This makes it easier to implement functionality like use of the 
 ControlMaster feature.
 
] 
<
> {
hunk ./External.hs 10
     signString, verifyPS,
     execPipeIgnoreError,
     getTermNColors,
-    pipeDoc_SSH_IgnoreError,
+    pipeDoc_SSH_IgnoreError, execSSH,
     maybeURLCmd,
     Cachable(Cachable, Uncachable, MaxAge)
   ) where
hunk ./External.hs 164
                        else copyRemoteCmd u v
 
 copySSH :: String -> FilePath -> IO ()
-copySSH u f = do p <- try $ getEnv "SSH_PORT" -- or DARCS_SSH_PORT ?
-                 scp_command <- getEnv "DARCS_SCP" `catch`
-                                \_ -> return "scp"
-                 let port = either (const []) (\x->["-P",x]) p
-                     scp = head $ words scp_command
-                     scp_args = tail $ words scp_command
-                 r <- exec scp (scp_args++port++[escape_dollar u,f])
+copySSH uRaw f = let u = escape_dollar uRaw in do
+                 (scp, scp_args) <- getSSH SCP u
+                 r <- exec scp (scp_args++[u,f])
                       "/dev/null" "/dev/null"
                  when (r /= ExitSuccess) $
                       fail $ "(scp) failed to fetch: " ++ u
hunk ./External.hs 250
                                               "source files:"] ++ ns
 
 copySSHs :: String -> [String] -> FilePath -> IO ()
-copySSHs u ns d = do p <- try $ getEnv "SSH_PORT" -- or DARCS_SSH_PORT ?
-                     sftp_command <- getEnv "DARCS_SFTP" `catch`
-                                     \_ -> return "sftp"
-                     let port = either (const []) (\x->["-oPort="++x]) p
-                         sftp = head $ words sftp_command
-                         sftp_args = port ++ tail (words sftp_command)
-                         path = drop 1 $ dropWhile (/= ':') u
+copySSHs u ns d = do (sftp, sftp_args) <- getSSH SFTP u
+                     let path = drop 1 $ dropWhile (/= ':') u
                          host = (takeWhile (/= ':') u)++":"
                          cd = "cd "++path++"\n"
                          input = cd++(unlines $ map ("get "++) ns)
hunk ./External.hs 335
             return f
            `catch` (\_ -> try_cmd cs)
 
+-- | Run a command on a remote location without passing it any input or
+--   reading its output.  Return its ExitCode
+execSSH :: String -> String -> IO ExitCode
+execSSH remoteAddr command =
+    do (ssh, ssh_args) <- getSSH SSH remoteAddr
+       exec ssh (remoteAddr:ssh_args++[command]) "/dev/null" "/dev/null"
 
hunk ./External.hs 342
-pipeDoc_SSH_IgnoreError :: [String] -> Doc -> IO Doc
-pipeDoc_SSH_IgnoreError args input =
-    do p <- try $ getEnv "SSH_PORT" -- or DARCS_SSH_PORT ?
-       ssh_command <- getEnv "DARCS_SSH" `catch`
-                      \_ -> return "ssh"
-       let port = either (const []) (\x->["-p",x]) p
-           ssh = head $ words ssh_command
-           ssh_args = tail $ words ssh_command
-       execPipeIgnoreError ssh (ssh_args++port++args) input
-
+pipeDoc_SSH_IgnoreError :: String -> [String] -> Doc -> IO Doc
+pipeDoc_SSH_IgnoreError remoteAddr args input =
+    do (ssh, ssh_args) <- getSSH SSH remoteAddr
+       execPipeIgnoreError ssh (ssh_args++ (remoteAddr:args)) input
 
 sendEmail :: String -> String -> String -> String -> String -> String -> IO ()
 sendEmail _ "" _ "" _ _ = return ()
hunk ./External.hs 639
 
 #endif
 
+-- ---------------------------------------------------------------------
+-- ssh helper functions
+-- ---------------------------------------------------------------------
+
+data SSHCmd = SSH | SCP | SFTP
+
+instance Show SSHCmd where
+  show SSH  = "ssh"
+  show SCP  = "scp"
+  show SFTP = "sftp"
+
+-- | Return the command and arguments needed to run an ssh command
+--   along with any extra features like use of the control master.
+--   See 'getSSHOnly'
+getSSH :: SSHCmd -> String -- ^ remote path
+       -> IO (String, [String])
+getSSH cmd _ = getSSHOnly cmd
+
+-- | Return the command and arguments needed to run an ssh command.
+--   First try the appropriate darcs environment variable and SSH_PORT
+--   defaulting to "ssh" and no specified port.
+getSSHOnly :: SSHCmd -> IO (String, [String])
+getSSHOnly cmd =
+ do ssh_command <- getEnv (evar cmd) `catch`
+                      \_ -> return $ show cmd
+    -- port
+    p <- try $ getEnv "SSH_PORT" -- or DARCS_SSH_PORT ?
+    let port = either (const []) (portFlag cmd) p
+        ssh = head $ words ssh_command
+        ssh_args = tail $ words ssh_command
+    --
+    return (ssh, ssh_args ++ port)
+    where
+     evar SSH  = "DARCS_SSH"
+     evar SCP  = "DARCS_SCP"
+     evar SFTP = "DARCS_SFTP"
+     portFlag SSH  x = ["-p", x]
+     portFlag SCP  x = ["-P", x]
+     portFlag SFTP x = ["-oPort="++x]
hunk ./Put.lhs 4
 \subsection{darcs put}
 \begin{code}
 module Put ( put ) where
-import System ( ExitCode( ExitSuccess ), exitWith, getEnv )
+import System ( ExitCode( ExitSuccess ), exitWith )
 import Monad ( when )
 import Directory ( createDirectory )
hunk ./Put.lhs 7
-import IO ( isAlreadyExistsError, try )
+import IO ( isAlreadyExistsError )
 import DarcsCommands ( DarcsCommand(..), nodefaults )
 import DarcsArguments ( DarcsFlag( Quiet, Verbose
                                  ),
hunk ./Put.lhs 26
 import Pristine ( Pristine, createPristine, flagsToPristine,
                   pristineToFlagString )
 import SlurpDirectory ( empty_slurpy )
-import Exec ( exec )
+import External ( execSSH )
 import RemoteApply ( remote_apply )
 #include "impossible.h"
 \end{code}
hunk ./Put.lhs 117
 
 remoteInit :: FilePath -> Pristine -> IO ()
 remoteInit repo pristine = do
-    p <- try $ getEnv "SSH_PORT" -- or DARCS_SSH_PORT ?
-    ssh_command <- getEnv "DARCS_SSH" `catch` \_ -> return "ssh"
-    let port = either (const []) (\x->["-p",x]) p
-        ssh = head $ words ssh_command
-        ssh_args = tail $ words ssh_command
-        pristineArg = pristineToFlagString pristine
-    exitCode <- exec ssh (ssh_args++port++[addr,"mkdir -p '"++path++
-                                           "' && cd '"++path++
-                                           "' && darcs init "++pristineArg]) 
-                "/dev/null" "/dev/null"
+    let pristineArg = pristineToFlagString pristine
+        command = "mkdir -p '"++path++
+                  "' && cd '"++path++
+                  "' && darcs init "++pristineArg
+    exitCode <- execSSH addr command
     when (exitCode /= ExitSuccess) $ 
          fail "Couldn't initialize remote repository."
   where (addr,':':path) = break (==':') repo
hunk ./RemoteApply.lhs 51
 
 apply_via_ssh :: String -> Doc -> IO Doc
 apply_via_ssh repo bundle =
-    pipeDoc_SSH_IgnoreError [addr,"darcs apply --all --repodir '"++path++"'"] bundle
+    pipeDoc_SSH_IgnoreError addr ["darcs apply --all --repodir '"++path++"'"] bundle
         where (addr,':':path) = break (==':') repo
 
 apply_via_ssh_and_sudo :: String -> String -> Doc -> IO Doc
hunk ./RemoteApply.lhs 56
 apply_via_ssh_and_sudo repo username bundle =
-    pipeDoc_SSH_IgnoreError [addr,"sudo -u "++username++
+    pipeDoc_SSH_IgnoreError addr ["sudo -u "++username++
                          " darcs apply --all --repodir '"++path++"'"] bundle
         where (addr,':':path) = break (==':') repo
 \end{code}
}
[Multiplex transactions over a single ssh connection (issue32).
Eric Kow <[EMAIL PROTECTED]>**20060317233337
 
 Eliminates the need to type your password a million times.  This
 requires a recent version of OpenSSH with the ControlMaster feature, but
 it is harmless if you do not have it.
 
] 
<
> {
hunk ./DarcsCommands.lhs 36
                      ) where
 import System.Console.GetOpt
 import Monad ( liftM, when )
-import List ( sort )
+import List ( nub, sort )
 import Control.Exception ( catch, throwIO, Exception ( ExitException ) )
 import System.Exit ( ExitCode ( ExitSuccess ), exitWith )
 import Test ( run_posthook )
hunk ./DarcsCommands.lhs 44
 
 import DarcsArguments
 import DarcsUtils ( formatPath, putStrLnError )
+import DarcsURL ( is_ssh )
+import External ( hasSSHControlMasterFeature, exitSSHControlMaster, launchSSHControlMaster )
 import ArgumentDefaults ( get_default_flag )
 import Printer ( Doc, putDocLn )
 #ifdef HAVEWX
hunk ./DarcsCommands.lhs 320
              nth_of _ [] = "UNDOCUMENTED"
              runWithPostHook os ex =
                  do here <- getCurrentDirectory
-                    (command_command cmd) (FixFilePath fix_path:os) ex
+                    -- launch a control master for that every distinct server, if we can
+                    has_ssh_ctrl <- hasSSHControlMasterFeature
+                    let sshServers = nub $ sort [ takeWhile (/= ':') p | p <- ex, is_ssh p ]
+                    when has_ssh_ctrl $ mapM launchSSHControlMaster sshServers >> return ()
+                    -- actually run the command and its posthooks
+                    (command_command cmd) (FixFilePath fix_path : os) ex
                        `Control.Exception.catch`
                        (\e -> case e of ExitException ExitSuccess -> return ()
                                         _ -> throwIO e)
hunk ./DarcsCommands.lhs 329
-                    run_posthook os here >>= exitWith
+                    postHookExitCode <- run_posthook os here
+                    -- kill off any control masters we may have launched
+                    when has_ssh_ctrl $ mapM exitSSHControlMaster sshServers >> return ()
+                    --
+                    exitWith postHookExitCode
+
 
 add_command_defaults :: DarcsCommand -> [DarcsFlag] -> IO [DarcsFlag]
 add_command_defaults cmd already =
hunk ./External.hs 12
     getTermNColors,
     pipeDoc_SSH_IgnoreError, execSSH,
     maybeURLCmd,
+    hasSSHControlMasterFeature, launchSSHControlMaster, exitSSHControlMaster,
     Cachable(Cachable, Uncachable, MaxAge)
   ) where
 
hunk ./External.hs 23
 import System.IO.Error ( isDoesNotExistError )
 import System.IO.Unsafe ( unsafePerformIO )
 import System.Posix.Files ( getSymbolicLinkStatus, isRegularFile, isDirectory )
-import System.Directory ( createDirectory, getDirectoryContents )
+import System.Directory ( createDirectory, getDirectoryContents, doesFileExist )
 import Char ( toUpper )
 import Foreign.C ( CString, withCString, CInt )
 import Foreign.Ptr ( nullPtr )
hunk ./External.hs 44
                           nullPS, nilPS, concatPS
                         )
 import Lock ( withTemp, withOpenTemp, readDocBinFile,
-              canonFilename, writeBinFile, writeDocBinFile
+              canonFilename, writeBinFile, writeDocBinFile,
+              tempdir_loc,
             )
 import CommandLine ( parseCmd, addUrlencoded )
 import Autoconf ( have_libcurl, have_sendmail, have_mapi, sendmail_path, darcs_version )
hunk ./External.hs 657
 --   See 'getSSHOnly'
 getSSH :: SSHCmd -> String -- ^ remote path
        -> IO (String, [String])
-getSSH cmd _ = getSSHOnly cmd
+getSSH cmd remoteAddr =
+ do (ssh, ssh_args) <- getSSHOnly cmd
+    -- control master
+    cmPath <- controlMasterPath remoteAddr
+    hasCm  <- doesFileExist cmPath
+    let cm_args = if hasCm then [ "-o ControlPath=" ++ cmPath ] else []
+    --
+    return (ssh, ssh_args ++ cm_args)
 
 -- | Return the command and arguments needed to run an ssh command.
 --   First try the appropriate darcs environment variable and SSH_PORT
hunk ./External.hs 688
      portFlag SCP  x = ["-P", x]
      portFlag SFTP x = ["-oPort="++x]
 
+-- | Return True if this version of ssh has a ControlMaster feature
+-- The ControlMaster functionality allows for ssh multiplexing
+hasSSHControlMasterFeature :: IO Bool
+hasSSHControlMasterFeature = do
+  (ssh, _) <- getSSHOnly SSH
+  sx <- exec ssh ["-O", "an_invalid_command"] "/dev/null" "/dev/null"
+  case sx of
+    ExitFailure 255 -> return True
+    _ -> return False
+
+-- | Launch an SSH control master in the background.  We don't have
+--   to wait for it or anything
+launchSSHControlMaster :: String -> IO ()
+launchSSHControlMaster addr = do
+  (ssh, ssh_args) <- getSSHOnly SSH
+  cmPath <- controlMasterPath addr
+  -- -f puts ssh in the background once it succeeds in logging you in
+  exec ssh (ssh_args ++ [addr, "-S", cmPath, "-N", "-f", "-M"]) "/dev/null" "/dev/null"
+  return ()
+
+-- | Tell the SSH control master for a given path to exit.
+exitSSHControlMaster :: String -> IO ()
+exitSSHControlMaster addr = do
+  (ssh, ssh_args) <- getSSHOnly SSH
+  cmPath <- controlMasterPath addr
+  exec ssh (ssh_args ++ [addr, "-S", cmPath, "-O", "exit"]) "/dev/null" "/dev/null"
+  return ()
+
+-- | Create the directory ssh control master path for a given address
+controlMasterPath :: String -- ^ remote path ([EMAIL PROTECTED]:file is ok; the file part with be stripped)
+                  -> IO FilePath
+controlMasterPath rawAddr = do
+  let addr = takeWhile (/= ':') rawAddr
+  tmp <- tempdir_loc
+  let tmpDarcsSsh = tmp ++ "darcs-ssh"
+  createDirectoryIfMissing False tmpDarcsSsh
+  return $ tmpDarcsSsh ++ "/" ++ addr
+
hunk ./Lock.lhs 29
               gzWriteAtomicFilePS, gzWriteAtomicFilePSs, gzWriteDocFile,
               rm_recursive,
               canonFilename, maybeRelink,
-              world_readable_temp,
+              world_readable_temp, tempdir_loc,
               takeLock, releaseLock,
             ) where
 
}
[More detailed comments for SSH control master.
Eric Kow <[EMAIL PROTECTED]>**20060320235200] 
<
> {
hunk ./External.hs 693
 hasSSHControlMasterFeature :: IO Bool
 hasSSHControlMasterFeature = do
   (ssh, _) <- getSSHOnly SSH
+  -- If ssh has the ControlMaster feature, it will recognise the
+  -- the -O flag, but exit with status 255 because of the nonsense
+  -- command.  If it does not have the feature, it will simply dump
+  -- a help message on the screen and exit with 1.
   sx <- exec ssh ["-O", "an_invalid_command"] "/dev/null" "/dev/null"
   case sx of
     ExitFailure 255 -> return True
hunk ./External.hs 708
 launchSSHControlMaster addr = do
   (ssh, ssh_args) <- getSSHOnly SSH
   cmPath <- controlMasterPath addr
-  -- -f puts ssh in the background once it succeeds in logging you in
+  -- -f : put ssh in the background once it succeeds in logging you in
+  -- -M : launch as the control master for addr
+  -- -N : don't run any commands
+  -- -S : use cmPath as the ControlPath.  Equivalent to -oControlPath=
   exec ssh (ssh_args ++ [addr, "-S", cmPath, "-N", "-f", "-M"]) "/dev/null" "/dev/null"
   return ()
 
}
[Add a flag to disable use of SSH control master.
Eric Kow <[EMAIL PROTECTED]>**20060320235217] 
<
> {
hunk ./DarcsArguments.lhs 62
                         sibling, flagsToSiblings, relink, relink_pristine,
                         files, directories, pending,
                         posthook_cmd, posthook_prompt,
-                        get_posthook_cmd, nullFlag
+                        get_posthook_cmd, nullFlag,
+                        disable_ssh_cm
                       ) where
 import System.Console.GetOpt
 import System.Directory ( doesDirectoryExist )
hunk ./DarcsArguments.lhs 1073
 get_posthook_cmd (_:flags) = get_posthook_cmd flags
 get_posthook_cmd [] = Nothing
 \end{code}
+
+\begin{options}
+--disable-ssh-cm
+\end{options}
+
+For commands which which invoke ssh, darcs will normally multiplex ssh
+sessions over a single connection as long as your version of ssh has
+the ControlMaster feature from OpenSSH versions 3.9 and above.  This
+option will avoid darcs trying to use this feature even if your ssh
+supports it.
+\begin{code}
+disable_ssh_cm :: DarcsOption
+disable_ssh_cm = DarcsNoArgOption [] ["disable-ssh-cm"] DisableSSHControlMaster
+                  "Disable use of SSH ControlMaster feature"
+\end{code}
hunk ./DarcsCommands.lhs 321
              runWithPostHook os ex =
                  do here <- getCurrentDirectory
                     -- launch a control master for that every distinct server, if we can
-                    has_ssh_ctrl <- hasSSHControlMasterFeature
-                    let sshServers = nub $ sort [ takeWhile (/= ':') p | p <- ex, is_ssh p ]
+                    hasSSHCtrl <- hasSSHControlMasterFeature
+                    let has_ssh_ctrl = hasSSHCtrl && not (DisableSSHControlMaster `elem` os)
+                        sshServers = nub $ sort [ takeWhile (/= ':') p | p <- ex, is_ssh p ]
                     when has_ssh_ctrl $ mapM launchSSHControlMaster sshServers >> return ()
                     -- actually run the command and its posthooks
                     (command_command cmd) (FixFilePath fix_path : os) ex
replace ./DarcsCommands.lhs [A-Za-z_0-9] has_ssh_ctrl useSSHCtrl
hunk ./DarcsFlags.lhs 41
                | Sign | SignAs String | NoSign | SignSSL String
                | HappyForwarding
                | Verify String | VerifySSL String
+               | DisableSSHControlMaster
                | EditDescription | NoEditDescription
                | Toks String
                | EditLongComment | NoEditLongComment | PromptLongComment
hunk ./Get.lhs 32
                                    Verbose, Quiet, Context ),
                         any_verbosity, partial, reponame,
                         match_one_context, set_default, set_scripts_executable,
+                        disable_ssh_cm,
                         pristine_tree, working_repo_dir )
 import DarcsRepo ( lazily_read_repo, write_inventory,
                     write_checkpoint_patch,
hunk ./Get.lhs 104
                                             set_default,
                                             set_scripts_executable,
                                             pristine_tree,
-                                            working_repo_dir]}
+                                            working_repo_dir,
+                                            disable_ssh_cm]}
 \end{code}
 \begin{code}
 get_cmd :: [DarcsFlag] -> [String] -> IO ()
hunk ./Pull.lhs 37
                         any_verbosity, test, dry_run,
                         set_default, summary, working_repo_dir,
                         set_scripts_executable,
+                        disable_ssh_cm,
                       )
 import Repository ( Repository, PatchToken, PatchSet, identifyRepository,
                     amInRepository, withRepoLock,
hunk ./Pull.lhs 105
                                              ignoretimes,no_deps,
                                              set_default,
                                              working_repo_dir,
-                                             set_scripts_executable]}
+                                             set_scripts_executable,
+                                             disable_ssh_cm]}
 \end{code}
 \begin{code}
 pull_cmd :: [DarcsFlag] -> [String] -> IO ()
hunk ./Push.lhs 28
                         print_dry_run_message_and_exit,
                         applyas, match_several, fix_filepath,
                         all_gui_interactive, dry_run,
+                        disable_ssh_cm,
                         any_verbosity, set_default, sign
                       )
 import Repository ( withRepoLock, slurp_recorded )
hunk ./Push.lhs 76
                                              all_gui_interactive,
                                              applyas, sign, dry_run, summary,
                                              working_repo_dir,
+                                             disable_ssh_cm,
                                              set_default]}
 \end{code}
 \begin{code}
hunk ./Put.lhs 12
 import DarcsArguments ( DarcsFlag( Quiet, Verbose
                                  ),
                         applyas, match_one_context, fix_filepath,
-                        any_verbosity, pristine_tree, working_repo_dir
+                        any_verbosity, pristine_tree, working_repo_dir,
+                        disable_ssh_cm,
                       )
 import Repository ( patchSetToPatches )
 import DarcsRepo ( read_repo, am_in_repo,
hunk ./Put.lhs 57
                     command_argdefaults = nodefaults,
                     command_darcsoptions = [any_verbosity,working_repo_dir,
                                             match_one_context,
-                                            applyas,pristine_tree]}
+                                            applyas,pristine_tree,
+                                            disable_ssh_cm]}
 \end{code}
 \begin{code}
 put_cmd :: [DarcsFlag] -> [String] -> IO ()
}

Context:

[Minor tweaks to manual.
Juliusz Chroboczek <[EMAIL PROTECTED]>**20060307143305] 
[Fix merge conflicts.
Juliusz Chroboczek <[EMAIL PROTECTED]>**20060307135524] 
[make "-f" a synonym for "--force"
[EMAIL PROTECTED] 
[Correct gui patch selection for commands like obliterate.
Eric Kow <[EMAIL PROTECTED]>**20060307032303
 
 The gui patch selection system did not reverse/invert patches in
 commands that need this behaviour (obliterate, unrecord).  We solve
 the problem by relying on code which factorises common behaviour 
 between the text and graphical patch selection systems.
 
] 
[Refactor output end of SelectChanges.
Eric Kow <[EMAIL PROTECTED]>**20060307032052] 
[Fix layout bug in OS X Tiger (wxDarcs).
Eric Kow <[EMAIL PROTECTED]>**20060302142517
 
 Seems the solution to all gui ills is to add another panel.
 
] 
[Resolve darcs gui conflict.
Eric Kow <[EMAIL PROTECTED]>**20060302010257
 
 Pull.lhs was conflicting with Edwin Thomson's 2005-12-08 patch
 "Don't make merge folders when we don't need them".  This
 patch merges the changes.
 
] 
[Correct copyFrameworks script (gui, osx).
[EMAIL PROTECTED]
 
 All binaries and libraries have some entry which tells what libraries
 they are linked against.  Any libraries which are not on the vanilla OS
 X need to be copied into the application bundle so that it will work 
 anywhere.  Whilst copying the libraries, you also need to change the
 entries refering to these libraries so that they point to the
 application bundle, and not their original path (e.g. /usr/local/lib).
 I had done this for the binary, but not for the libraries being copied.
 
 Also, make the copying of libraries recursive.
 
] 
[Correct compilation of gui code in console mode.
Eric Kow <[EMAIL PROTECTED]>**20060131013107] 
[Scripts and makefile target to distribute wxDarcs on OS X.
Eric Kow <[EMAIL PROTECTED]>**20060131012439
 
 Creates an application bundle and a .dmg file.
 
] 
[Add a standalone graphical interface.
Eric Kow <[EMAIL PROTECTED]>**20060131012036
 
 The gui code prior to this patch allows graphical darcs forms to be run from
 the command line.  This builds off that functionality by adding a graphical
 front-end, allowing users to access these forms with a click of a button.
 In other words, this allows users to run darcs without the command line.
 
 Much more work will have to be done on this front end before it is as usable as
 the command-line darcs, but hopefully patch shall kick things off.
 
] 
[Send darcs commands' output to log (gui only).
Eric Kow <[EMAIL PROTECTED]>**20060130232608
 
 If running in SubGui mode, darcs commands send their output to wxWidgets log
 instead of stdout, because under the standalone gui, this output would
 otherwise be hidden.
 
] 
[Add a lock mechanism for graphical interfaces.
Eric Kow <[EMAIL PROTECTED]>**20060130215323
 
 Add a distinct lock for the GUI.  What makes this lock different is
 that taking and setting the lock are done seperately, instead of 
 using an atomic operation like withRepoLock.  This allows us to 
 assign the releasing of the lock to GUI events like closing a window.
 
 This would be useful for a standalone interface to prevent weird 
 race conditions, for example, from mulitple Record windows being open.
 Note that withLock is not enough for this purpose; the lock would 
 already be released before the user even touches the window.
 
] 
[Make unpull, unrecord, obliterate accept --gui.
Eric Kow <[EMAIL PROTECTED]>**20060130201041
 
 This also has the side effect of them accepting --interactive.
 
] 
[Abstract the patch-viewer widget.
Eric Kow <[EMAIL PROTECTED]>**20060130153753
 
 We shouldn't care how the patch-viewer is implemented.
 
] 
[Add a SubGui flag.
Eric Kow <[EMAIL PROTECTED]>**20060130153530
 
 The SubGui flag enables commands to be run under a main GUI. 
 The idea is that wxhaskell's start function really does not
 like to be called more than once, so we avoid calling it 
 a second time if a main gui already has done so.
 
] 
[Remove tabs in graphical output.
Eric Kow <[EMAIL PROTECTED]>**20060130134403
 
 Wxhaskell has trouble when tabs are included in the text to be
 displayed.  We quietly convert these tabs into spaces.
 
] 
[(GUI) Create GuiUtils.lhs, move tree widget code to it.
Eric Kow <[EMAIL PROTECTED]>**20060129004445
 
 Also, simplify the tree widget code.  This file will provide a 
 central place for various graphical odds and ends.  
 
] 
[Refactor calls to Rez in makefile (OS X).
Eric Kow <[EMAIL PROTECTED]>**20060125235731] 
[Fix layout bugs in GUI (buttons were being hidden).
Eric Kow <[EMAIL PROTECTED]>**20060122215729
 
 For some reason, scrolled windows seem to need to be inside of panels
 for them to behave correctly when their parent windows are resized. 
 Otherwise they hide the button bars used in Record and SelectChanges.
 
 Also, slightly simplify GUI code to avoid proliferation of widgets.
 
] 
[Fix conflict between Zachary P. Landau's and my patch.
Eric Kow <[EMAIL PROTECTED]>**20060306010743
 
] 
[Refactor SelectChanges.lhs.
Eric Kow <[EMAIL PROTECTED]>**20060306004421
 
 1. Rearrange parameters of with_any_selected_changes to favour eta reduction.
 2. Refactor type definitions for with_selected...changes functions to
    indicate that it's all the same thing.
 3. Separate patch counting with decisions about which patches we should 
    consider.
 
] 
[Perl tests: get rid of 'darcs: <stdin>: hGetLine: end of file' messages
Marnix Klooster <[EMAIL PROTECTED]>**20060304180420
 
 These were printed because 'n' was not answered to 'Really unpull' and 'Really
 obliterate' questions.
 
 Also, do not send superfluous '\n' to darcs in echo_to_darcs().
] 
[Test pull.pl, CREATE_DIR_ERROR: removed TODO now that directory name is printed in error message
Marnix Klooster <[EMAIL PROTECTED]>**20060304164033
 Also removes a superfluous (and erroneous) chdir statement, which tried to
 change to non-existing directory templ (last character was ell instead of one).
 
 Also improves the description of this test.
] 
[Make darcs exit after last patch in changes --interactive.
Zachary P. Landau <[EMAIL PROTECTED]>**20060303014534
 Currently, hitting 'j' on the last patch in changes --interactive has
 no effect.  This patch will cause darcs to exit, making the command
 more consistent with an interactive pull.
] 
[Fix crash when using changes --interactive with --patch or --match
Zachary P. Landau <[EMAIL PROTECTED]>**20060303013820] 
[Chdir systematically in Repository.lhs.
Juliusz Chroboczek <[EMAIL PROTECTED]>**20060303181824
 Unlike the other functions in Repository.lhs, applyToPristine, get_unrecorded
 and sync_repo used to require that the caller chdir to the right place.
 This fixes that inconsistency.
] 
[Improved support for absolute paths (issue39)
Eric Kow <[EMAIL PROTECTED]>**20060304111532
 
 This modifies fix_maybe_absolute so that if you specify a repository
 directory, any absolute paths prefixed by this directory are converted
 to be ones relative to the repodir.
 
 The following commands now account for arguments which are absolute
 paths but refer to files in the repository:
     add, amend-record, annotate, changes, diff,
     mv, record, remove, replace, revert, whatsnew
 
 The following commands are not actually affected, though the code 
 is changed: 
     apply, push, pull, put.
 
 This patch also slightly refactors FilePathUtils.lhs
 
] 
[Enable tests for absolute paths.
Eric Kow <[EMAIL PROTECTED]>**20060304104355] 
[Extend argument substitution for --external-merge
Daan Leijen <[EMAIL PROTECTED]>**20060214062042
 Argument substitution used to work on words at the time which made
 it difficult to use Windows merge tools like the supernice tortoiseMerge.
 Now, substitution of "%a" etc. takes place everywhere and we can write:
 
 --external-merge 'tortoiseMerge /base:"%a" /mine:"%1" /theirs:"%2" /merged:"%o"
 
 To make it complete, we substitute "%%" to "%".
] 
[boring += autom4te.cache/
Kirill Smelkov <[EMAIL PROTECTED]>**20060130071416] 
[omit the "Finished getting." message when --quiet
Simon Marlow <[EMAIL PROTECTED]>**20060120074731] 
[Enable GUI on MacOS X with /Developer/Tools/Rez.
Eric Kow <[EMAIL PROTECTED]>**20060121004325
 
 Without this command, the darcs GUI does not take focus under MacOS X.
 
] 
[Reimplement flexible GUI widget for whatsnew.
Eric Kow <[EMAIL PROTECTED]>**20060121001049
 
 The current implementation was not working, maybe as a result of
 a wxhaskell or WxWidgets bug in which resized widgets lose their
 new sizes when the parent window is resized.
 
 The new implementation works around this by displaying patches in
 tree form.  Each node is a patch summary, and expanding that node
 reveals the full patch.
 
] 
[Freshen GUI code so that it compiles.
Eric Kow <[EMAIL PROTECTED]>**20060121000818] 
[Don't make merge folders when we don't need them
[EMAIL PROTECTED]
 
] 
[Add "y" and "n" commands to changes --interactive.
Zachary P. Landau <[EMAIL PROTECTED]>**20060115054548] 
[Save email description file if a send fails
Zachary P. Landau <[EMAIL PROTECTED]>**20060114204826] 
[posthook success/failure messages with --verbose only
Jason Dagit <[EMAIL PROTECTED]>**20060113204930
 Changes behavior of posthook status messages.  Use --verbose to have
 posthook status messages.  Error reporting can be turned off with
 --quiet.  Note:  The command run by the posthook might still generate
 output, this patch does not address this output.
] 
[bump version to 1.0.7pre1
Tommy Pettersson <[EMAIL PROTECTED]>**20060301000323] 
[show 1.0.6 as latest stable source on web page
Tommy Pettersson <[EMAIL PROTECTED]>**20060301000158
 Forgot this, again :-/
] 
[removed last bits of create-repo from makefile (issue14)
Jason Dagit <[EMAIL PROTECTED]>**20060113212432] 
[TAG 1.0.6
Tommy Pettersson <[EMAIL PROTECTED]>**20060228111841] 
[bump version to 1.0.6
Tommy Pettersson <[EMAIL PROTECTED]>**20060228111833] 
[fix bug in release state version extraction
Tommy Pettersson <[EMAIL PROTECTED]>**20060226182419
 Save result of old regexp match before matching new regexps.
] 
[remove dependency on unit from normal tests in makefile
Tommy Pettersson <[EMAIL PROTECTED]>**20060226181751] 
[bump version to 1.0.6rc2
Tommy Pettersson <[EMAIL PROTECTED]>**20060226164451] 
[TAG 1.0.6rc1
Tommy Pettersson <[EMAIL PROTECTED]>**20060219231919] 
[bump version to 1.0.6rc1
Tommy Pettersson <[EMAIL PROTECTED]>**20060219231900] 
[add some changelog entries
Tommy Pettersson <[EMAIL PROTECTED]>**20060219231847] 
[change suggestion in bestpractices on reverting addfile to use remove
Tommy Pettersson <[EMAIL PROTECTED]>**20051115101928] 
[resolve conflicts
Tommy Pettersson <[EMAIL PROTECTED]>**20060219213218] 
[Minor documentation editing.
Bill Trost <[EMAIL PROTECTED]>**20060108193245
 Change details:
  * Replace "repo" with "repository" where practical.
  * Replace "an email" with something less grating.  (-:
  * Try to consistify formatting, punctuation, & capitalization.
  * etc.
] 
[check for malicious path before applying patch (issue48)
Tommy Pettersson <[EMAIL PROTECTED]>**20060219192328] 
[new test for unpull
Tommy Pettersson <[EMAIL PROTECTED]>**20060212172344] 
[reimplement --set-script-executable after apply_list unoptimization
Tommy Pettersson <[EMAIL PROTECTED]>**20060123004900] 
[revert optimization for apply_list
Tommy Pettersson <[EMAIL PROTECTED]>**20060119231523
 The optimization made unrecord and unpull sometimes fail.
 It, unnecessarily, removes the --set-script-executable functionality.
] 
[Commute patches when getting a specific version of a repo
[EMAIL PROTECTED]
 Fix for issue 67
] 
[add test for get --tag with commuted patches (Issue67)
Tommy Pettersson <[EMAIL PROTECTED]>**20060211194736
 Supplied by Grant Husbands.
] 
[Add newline between long comment and changed files list in dry-run summary
[EMAIL PROTECTED] 
[remove TODO from three passing tests in pull.pl
Tommy Pettersson <[EMAIL PROTECTED]>**20060211183857] 
[new TODO test for better message on directory conflict when pulling
Mark Stosberg <[EMAIL PROTECTED]>**20051124003621] 
[test suite: fix some glitches in directory creation/removal
Tommy Pettersson <[EMAIL PROTECTED]>**20060130012803] 
[dateparser.sh only tries to delete tmp if it exists
Jason Dagit <[EMAIL PROTECTED]>**20060114021327] 
[All perl tests use cleanup at beginning instead of rm_rf
Jason Dagit <[EMAIL PROTECTED]>**20060114021114
 rm_rf will give an error (causing test to fail) when the directory is
 missing.  Use cleanup instead as it will not give an error.
] 
[Added author to darcs record commandline in dateparser.sh
Jason Dagit <[EMAIL PROTECTED]>**20060114021017] 
[Fixed minor typo in home page.
Marnix Klooster <[EMAIL PROTECTED]>**20060113054649] 
[use exact matching in some changelog entries
Tommy Pettersson <[EMAIL PROTECTED]>**20060129124023] 
[add some changelog entries
Tommy Pettersson <[EMAIL PROTECTED]>**20060129123955] 
[Detect dates which overflow.  Throw a more helpful error message.
Eric Kow <[EMAIL PROTECTED]>**20060211194521
 
 An example of a date which overflows is "105 years ago" on my system.
   
 For reference: The "problem" is not so much Haskell's System.Time, but
 in the underlying C library.  System.Time uses Integer to represent
 ClockTime, so theoretically this number can be as big as we want.
 However, the function addToClockTime makes a call to 'mktime' (time.h)
 to get a value for the number of seconds elapsed since 1970.  And this
 value is of a fixed-size type (time_h).  If the number of seconds
 overflows, mktime returns -1 to indicate an error.  This is detected by
 System.Time and propagated up as a user error "Time.toClockTime: invalid
 input".
 
] 
[Correct dateparser test's self-cleanup.
Eric Kow <[EMAIL PROTECTED]>**20060129210701
 
 The dateparser test was not properly removing its own tmp directory,
 causing it to be a pain when using the tests/tests_to_run mechanism.
 
] 
[Remove '4 score, 7 years ago' from dateparser test.
Eric Kow <[EMAIL PROTECTED]>**20060129210635] 
[Update dateparser test with CVS style dates.
Eric Kow <[EMAIL PROTECTED]>**20060120233434] 
[Add time zone support for CVS date parsing. (issue104)
Eric Kow <[EMAIL PROTECTED]>**20060120233327
 
] 
[call unnamed patches "changes" in interactive patch selection dialogue
Tommy Pettersson <[EMAIL PROTECTED]>**20060113203829
 It currently affects record, revert and amend, but will generally do
 "the right thing".
] 
[fix pathname in comment in darcs.cgi.in
[EMAIL PROTECTED] 
[fix win32 build breaks
Will <[EMAIL PROTECTED]>**20060112054853] 
[fix content-type in rss output of cgi
Will <[EMAIL PROTECTED]>**20060110052938] 
[resolve conflict
Tommy Pettersson <[EMAIL PROTECTED]>**20060108173148] 
[Obey normal autoconf conventions.
Dave Love <[EMAIL PROTECTED]>**20051117190231
 Allows you to `make install prefix=...', for instance, and doesn't change
 default for sysconfdir.
] 
[add link to darcs-unstable repo on darcs home page
Tommy Pettersson <[EMAIL PROTECTED]>**20060107212721] 
[Don't say "yes" in an infinite loop.
Bill Trost <[EMAIL PROTECTED]>**20060108162605
 I ended up with this test hanging forever because the while loop wasn't getting
 a SIGPIPE because of the way my editor environment (no controlling tty?) was
 set up. We have a pretty good idea of how many "y"s are needed anyhow.
] 
[fix crash caused by tests failing on amend-record
Zachary P. Landau <[EMAIL PROTECTED]>**20060108174722] 
[Make the "record --pipe" docs match the program behavior.
Bill Trost <[EMAIL PROTECTED]>**20060107050910] 
[Make --exact-version also work if darcs is built from "make dist" tar ball
Marnix Klooster <[EMAIL PROTECTED]>**20060106205857
 
 This is to prevent "darcs --exact-version" outputting something like
 
   darcs compiled on Mar  2 2005, at 10:56:16
   unknown
 
 as it does when building from the output of "make dist", e.g., from the
 official tarballs at darcs.net.  (This is what a lot of people and distros do.
 Gentoo does this, and I'm using Gentoo, and I want to be able to do "darcs
 --exact-version" and have it output something sensible.)
 
 The reason that this problem occurs is that while doing 'make predist' (in the
 'predist' preference), Context.hs was nicely preserved by predist_copy, but
 then thrown away by distclean which calls clean.  So the resulting tarball has
 no Context.hs, which results in the "unknown" exact version.
 
 The solution consists of the following:
 
  * Only remove Context.hs in "clean" if it can be rebuilt using its rule
    in automake.mk (i.e., if _darcs/inventory exists, so if we are in a
    repository).
 
  * Target realclean is renamed to the newer maintainer-clean and extended a
    little, according to the GNU make manual (not strictly necessary).
 
 As a result of this, we now follow GNU makefile conventions more closely.  See
 the rules in the "Standard Targets for Users" section of the GNU make manual
 (currently at http://www.gnu.org/software/make/manual/html_node/make_127.html),
 and an interpretation of these rules in the "What Gets Cleaned" section of the
 GNU automake manual (currently at
 http://www.gnu.org/software/automake/manual/html_node/Clean.html).
 
 Thanks to Taral <[EMAIL PROTECTED]> for the above info.
] 
[only create log file when a long comment was requested
Zachary P. Landau <[EMAIL PROTECTED]>**20060108181034] 
[Use temporary file when editing send description.
Zachary P. Landau <[EMAIL PROTECTED]>**20051217212051] 
[--repodir for changes (RT #196 and #567)
Eric Kow <[EMAIL PROTECTED]>**20060109001224
 
 Changes already accepts a --repo flag for possibly remote repo dirs, but there
 is no reason not to also accept --repodir.  The gain in consistency outweighs
 the cost in redundancy.
    
 Also, do not attempt to get_repodir unless --repo is in the arguments.  This
 is so that --repodir can work with relative paths.  (Otherwise, darcs tries to
 change directory twice, which is bad).  
 
] 
[More canonization
Eric Kow <[EMAIL PROTECTED]>**20060108235935
 
 canonized : Mark Stosberg, Erik Schnetter, Joeri van Ruth 
 identified: Richard Smith, Victor Hugo Borja Rodriguez
 
] 
[Improved single-character prompt (RT #261)
Eric Kow <[EMAIL PROTECTED]>**20060108225741
 
 In the dialogue prompting for a single character as a response, if the
 user just presses enter, we behave is if we got an invalid response.
 This way, the user gets a little bit of feedback that he should respond
 differently.
   
 Also: refactors the case where there is a default answer and where the
 user may press '?' for help.
 
] 
[Corrections to bugfix for (RT #466)
Eric Kow <[EMAIL PROTECTED]>**20060108225411
 
 The bug fix for case insensitive filesystems was incorrect because
  1. canonicalizePath does not canonicalise the same filename with
     different cases into the same entry
  2. RT #466 affects case sensitive and case insensitive file 
     systems alike (i.e. the bug description was wrong)
  3. canonicalizePath is not available in ghc 6.2.2
 
 This correction also has the advantage of being much simpler and closer
 to what David Roundy suggested on the bug tracker.  We remove the old
 file from the slurpy so that it doesn't get mistaken for the new file.  
 
] 
[use _darcs/pristine in regression tests
Eric Kow <[EMAIL PROTECTED]>**20060108222000] 
[Update "darcs init" documentation to match its behavior.
Bill Trost <[EMAIL PROTECTED]>**20060105040737] 
[add a --without-docs option to configure
[EMAIL PROTECTED] 
[fix for Issue14 remove darcs-createrepo
Jason Dagit <[EMAIL PROTECTED]>**20051224002230] 
[Support --interactive option in changes command (issue #59).
Zachary P. Landau <[EMAIL PROTECTED]>**20051221052049] 
[Fix type incompatibility between C code and Haskell foreign declaration.
Juliusz Chroboczek <[EMAIL PROTECTED]>**20060106154108] 
[Move patchSetToPatches to Repository.lhs
Zachary P. Landau <[EMAIL PROTECTED]>**20051219043719] 
[Use _darcs/pristine instead of _darcs/current.
Juliusz Chroboczek <[EMAIL PROTECTED]>**20051215180814
 All versions of Darcs since 1.0.2rc1 are able to handle either name.  This
 will break compatibility of new repositories with older versions.
] 
[Allow rename to different case (RT #466, case-insensitive file systems)
Eric Kow <[EMAIL PROTECTED]>**20060106000141
 
 Creates an exception in the check that the new name does not already exists;
 it's ok if both names reduce to the same canonical path
 
] 
[Coalesce setpref (issue70 and RT #349)
Eric Kow <[EMAIL PROTECTED]>**20051230230842] 
[Added test selection mechanism to makefile
Eric Kow <[EMAIL PROTECTED]>**20051230230008
 
 If the developer creates a file test/tests_to_run with the filenames
 of the tests to run, only those tests will be run.
 
] 
[Invert 'file exists already' error message in mv
Eric Kow <[EMAIL PROTECTED]>**20051230220431
 
 mv used the wrong error message for --case-ok and opposite 
 
] 
[--repodir argument for get (RT #196 - controversial?)
Eric Kow <[EMAIL PROTECTED]>**20051230133605
 
 get already accepts a --repo-name flag, but I see no reason to keep this
 distinction, especially if we accept that init should accept --repodir
 
 In this implementation, we also keep the old --repo-name around for backwards
 compatability (of dubious value here), but the internal representation is
 changed to that of repodir
 
] 
[--repodir argument for several commands (RT #196 and RT #559)
Eric Kow <[EMAIL PROTECTED]>**20051230021652
 
 Commands affected: dist, optimize, repair, replace, setpref, tag, trackdown
 
 Includes a small repodir test script.
     
 Note that wrt RT #196 
   * replace and setpref (marked "no need" in the bug report -- but I don't see why not)
   * changes (--repo)  untouched [ I'd suggest having both flags available ]
   * get (--repo-name) [ no reccomendations ]
 
] 
[bug fixes for darcs help
Eric Kow <[EMAIL PROTECTED]>**20051230011003] 
[Added --repodir argument to init (RT #104 and part of RT #196)
Eric Kow <[EMAIL PROTECTED]>**20051230005424
 
 This implementation also tries to create the repodir if it does not exist.
 
] 
[Canonize myself and almost all other contributers.
Eric Kow <[EMAIL PROTECTED]>**20051229140428
 Add function to append name to email address 
 
 Merged: Marnix Klooster, Eric Kow, Andres Loeh, Esa Ilari Vuokko 
 
 Looked up name on Google for most orphaned email addresses.
 Hope nobody actually objects to this.
 
] 
[Do not document "darcs query manifest" twice.
Erik Schnetter <[EMAIL PROTECTED]>**20051222125103] 
[Rename git.c to gitlib.c
Erik Schnetter <[EMAIL PROTECTED]>**20051222115318
 
 On case-insensitive file systems, the source files Git.lhs and git.c
 lead to the same object file git.o.  Renaming git.c to gitlib.c solves
 this problem.
] 
[Remove periods from the AC_MSG_CHECKING call for the release state.
Matt Kraai <[EMAIL PROTECTED]>**20051220174536] 
[Implementation of help command
Eric Kow <[EMAIL PROTECTED]>**20051218172558
 (RT #307)
 
 Provides a command to display usage information on the screen.
  darcs help           = darcs --help
  darcs help --verbose = darcs --extended-help
  darcs help command   = darcs command --help
 
 This implementation understands abbreviated commands and subcommands.
 Slightly refactors darcs.lhs.
 
] 
[Extended date matching functionality. 
Eric Kow <[EMAIL PROTECTED]>**20051228210942
 (issue31 and RT #34)
 
 Now accepts ISO 8601 intervals (mostly) as well as a larger subset of
 English (including times like "yesterday at noon").
 
 Note: also includes corrections to ISO 8601 date/time parsing, using
 a more elegant technique of building dates up. 
 
] 
[Partial implementation of iso 8601 dates
Eric Kow <[EMAIL PROTECTED]>**20051228123040
 (issue31) - first step 
 
 reluctant to implement (ambiguous!): 
   * years > 9999  
   * truncated representations with implied century (89 for 1989) 
 unimplemented: 
   * time intervals -- this might be good to have in darcs
   * negative dates (BC)                    
 
] 
[only print 'making executable' in verbose mode
Eric Kow <[EMAIL PROTECTED]>**20051226182817] 
[reorganize comments (and add a comment) in Depends.lhs.
David Roundy <[EMAIL PROTECTED]>**20051218122029] 
[fix bug in doesDirectoryReallyExist.
David Roundy <[EMAIL PROTECTED]>**20051020121710
 We were failing with an exception if there was no such object.  The error
 message was:
 
 Fail: getSymbolicLinkStatus: does not exist
] 
[fix type of foreign calls in FastPackedString.
David Roundy <[EMAIL PROTECTED]>**20050920125800] 
[rename RepoTypes to PatchSet.
David Roundy <[EMAIL PROTECTED]>**20050917133920] 
[remove PatchSequence, which has long been obsolete.
David Roundy <[EMAIL PROTECTED]>**20050917133313
 The patch removes remaining vestiges of PatchSequence, which was obsoleted
 long ago by PatchSet (which stores patches in the opposite order (better
 for lazy use) and which has additional information about tags that allows
 us to avoid looking at old history.
] 
[RemoteApply no longer depends on cd, use --repodir instead.
[EMAIL PROTECTED]
 
 This is a minor change to make darcs no longer use cd
 before applying patches to a remote repository. 
 Now the --repodir option for the apply command is used.
 
 This patch came from a hack to rssh[http://sf.net/projects/rssh]
 to allow using darcs as a restricted command without depending
 on the cd binary.
 http://sf.net/tracker/index.php?func=detail&aid=1351939&group_id=65349&atid=510643
] 
[Support signed push
Esa Ilari Vuokko <[EMAIL PROTECTED]>**20051129082159] 
[Fix typo in multirepo pull.
Juliusz Chroboczek <[EMAIL PROTECTED]>**20051217201918] 
[Fix merge conflicts.
Juliusz Chroboczek <[EMAIL PROTECTED]>**20051217201903] 
[add changelog entry for multirepo pull.
David Roundy <[EMAIL PROTECTED]>**20051215122808] 
[add support for pulling from multiple repositories simultaneously.
David Roundy <[EMAIL PROTECTED]>**20050919125012] 
[Use POSIX-style option for 'head', instead of obsolescent syntax
Marnix Klooster <[EMAIL PROTECTED]>**20051216111731] 
[Clarify wording for changes that can't be unreverted
[EMAIL PROTECTED] 
[Set attachment filename when sending a patch bundle by e-mail.
Zachary P. Landau <[EMAIL PROTECTED]>**20051217195009] 
[save long comment file if a test fails during record
Zachary P. Landau <[EMAIL PROTECTED]>**20051216023948] 
[correction for send.sh test
Eric Kow <[EMAIL PROTECTED]>**20051218095652
 previously failed on (at least) MacOS X 10.3.9
 
] 
[properly quote paths so that paths with spaces in them are okay
[EMAIL PROTECTED] 
[fix up debug printouts in cygwin-wrapper.bash
[EMAIL PROTECTED] 
[smoother invocation of cygwin-wrapper.bash -- it detects fully-qualified path to itself by leading /
[EMAIL PROTECTED] 
[modernize amend-record.pl to be more portable.
Mark Stosberg <[EMAIL PROTECTED]>**20050402133417
 
 This depends on the new "echo_to_darcs()" function in Test::Darcs
] 
[implementation of --set-scripts-executable on local darcs get
[EMAIL PROTECTED]
 proposed fix for issue38
 
 The --set-scripts-executable flag is normally evaluated when you apply
 patches.  But when you do a local darcs get, no patches are applied.
 So as a solution, we traverse the directory on local darcs get , and set
 any script files to be executable. 
 
 Note: one flaw in this patch is that it duplicates the definition of
 what a script is -- a file that starts with #! -- in PatchApply.lhs and
 Get.lhs.  It might be good to refactor these somehow.
 
] 
[extended set-scripts-executable test
[EMAIL PROTECTED]
 added check for local darcs get (issue 38) as well as initial sanity check
  
] 
[Fix merge conflicts.
Juliusz Chroboczek <[EMAIL PROTECTED]>**20051214223217] 
[Add --subject flag to 'darcs send'
Joeri van Ruth <[EMAIL PROTECTED]>**20051205120301] 
[print out the patch name when a test fails.
Zachary P. Landau <[EMAIL PROTECTED]>**20051205055109] 
[revert maybe_relink and atomic_create to original C code.
David Roundy <[EMAIL PROTECTED]>**20051208131213] 
[resolve conflicts between stable and unstable.
David Roundy <[EMAIL PROTECTED]>**20051206134818] 
[Merge changes
Ian Lynagh <[EMAIL PROTECTED]>**20051008225210] 
[fix mkstemp implementation for win32
Peter Strand <[EMAIL PROTECTED]>**20050810211303] 
[Implement parts of System.Posix.(IO|Files) for win32
[EMAIL PROTECTED] 
[implement RawMode with library functions instead of ffi
[EMAIL PROTECTED] 
[call hsc2hs without output filename argument
[EMAIL PROTECTED] 
[Rename compat.c to c_compat.c to avoid object filename conflict with Compat.hs
[EMAIL PROTECTED] 
[Move atomic_create/sloppy_atomic_create to Compat
Ian Lynagh <[EMAIL PROTECTED]>**20050730141703] 
[Split the raw mode stuff out into its own .hsc file. Windows needs some TLC
Ian Lynagh <[EMAIL PROTECTED]>**20050730134030] 
[Move maybe_relink out of compat.c
Ian Lynagh <[EMAIL PROTECTED]>**20050730131205] 
[Remove is_symlink
Ian Lynagh <[EMAIL PROTECTED]>**20050730122255] 
[Move mkstemp to Compat.hs
Ian Lynagh <[EMAIL PROTECTED]>**20050730020918] 
[Start Compat.hs, and move stdout_is_a_pipe from compat.c
Ian Lynagh <[EMAIL PROTECTED]>**20050730004829] 
[Fix mistyped /dev/null, fixes --sendmail-command in Windows
Esa Ilari Vuokko <[EMAIL PROTECTED]>**20051129160120] 
[Use \ as path separator for GnuPG in Windows -- makes apply --verify work
Esa Ilari Vuokko <[EMAIL PROTECTED]>**20051129164533] 
[make dangers and recommended use of "Amend" clearer in the docs.
Mark Stosberg <[EMAIL PROTECTED]>**20051213140523
 
 I think it's important to be clearer about when it's appropriate to use 'amend',
 so I moved some notes into the short and mid-length help texts.
] 
[update web page to reflect 1.0.5 as latest stable source.
Tommy Pettersson <[EMAIL PROTECTED]>**20051213111137] 
[fix handling of absolute paths containing drive letters
Will <[EMAIL PROTECTED]>**20051208054737
 This fixes issue 47 where paths containing drive letters (i.e. on windows)
 are not treated as absolute paths.
] 
[bump version to 1.0.6pre1
Tommy Pettersson <[EMAIL PROTECTED]>**20051208092839] 
[TAG 1.0.5
Tommy Pettersson <[EMAIL PROTECTED]>**20051207112730] 
Patch bundle hash:
001959e52921120c2085905682c1741f0858f335
_______________________________________________
darcs-devel mailing list
[email protected]
http://www.abridgegame.org/cgi-bin/mailman/listinfo/darcs-devel

Reply via email to