[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