[darcs-devel] [patch1179] Darcs.Repository.Flags: added Eq instanc... (and 4 more)

Ganesh Sittampalam ganesh at earth.li
Sun Nov 9 10:00:20 UTC 2014


Hi,

On 08/11/2014 23:26, Ben Franksen wrote:

> Ganesh Sittampalam wrote:
>>
>> I'm playing around with moving them inline to the DarcsCommand
>> specifications and avoiding the boilerplate odesc/defaultFlags/ocheck.
>> If it works out, it'll mean they can be just specified once there and
>> avoid needing to give a signature anywhere.
> 
> I'd be astonished if you get this to work, because of the type parameters, 
> which are (necessarily, that's a feature) different for each command. The 
> Option 'member functions' odesc, oparse, etc kind of 'equalize' these 
> differences: they have simple monomorphic result types like [DarcsFlag]. I 
> have been playing with existentially quantifying over the parameters but 
> that really just moves the ugliness from one place to another.

I've got something sort of working, but it is indeed with existentials -
see attached.

One difficulty is that with the options lists hidden away behind an
existential, they can't be reused for the new-style parsing. One
question about that: why does recordConfig not use the same set of
options as recordOpts?

recordConfig :: [DarcsFlag] -> RecordConfig
recordConfig = oparse (recordBasicOpts ^ O.verbosity ^
                           recordAdvancedOpts ^ O.useCache) RecordConfig

recordOpts = recordBasicOpts `withStdOpts` recordAdvancedOpts

Is it because some options are handled by the infrastructure so don't
need to be in RecordConfig?

>> In the shorter term we can hopefully force the
>> flags lists to be normalised by passing through oparse and ounparse.
> 
> This is possible, but (see above) you need to do it separately in every 
> command implementation (AFAICS).

Yes, that was my plan (and why I then started experimenting with putting
the options into the commands directly as above, to avoid the need for
this).

> I did not do this because I think it is a bad idea, since it covers up the 
> problem instead of fixing it. I really want to get rid of all the explicit 
> flag membership testing. If a test fails this is an incentive to do just 
> that. I think the patch I sent demonstrates that doing this is mostly 
> straight forward.

My worry is all the places that are broken but aren't exposed by failing
tests.

> and later:
>> The worry is how many other places similar things may be happening; I'm
>> not too comfortable passing around unnormalised [DarcsFlag] values as
>> who knows how they might be used.
> 
> I know it will be some work to review all the places where the flag list is 
> used directly, but I think we'll have to do it anyway, the sooner the 
> better.
> 
> Now that the new options system is in screened, we should also make it clear 
> that using [DarcsFlag] in any way other than as an opaque Config value is 
> strongly discouraged, especially in new code.

Once the cleanup is done, would it make sense to put the DarcsFlag
definition in the same module as the options, and then not export the
values? It might also provide a simple way to find all the places where
the flag list is inspected directly.

Cheers,

Ganesh
-------------- next part --------------
1 patch for repository /home/ganesh/darcs/screened:

patch 29059db18a8de04841c03e3e047d245c4e497459
Author: Ganesh Sittampalam <ganesh at earth.li>
Date:   Sun Nov  9 09:44:06 UTC 2014
  * WIP: inlining the option specifications

New patches:

[WIP: inlining the option specifications
Ganesh Sittampalam <ganesh at earth.li>**20141109094406
 Ignore-this: f37783cee5caf3ac4fd74fb33f96ed5e
] hunk ./src/Darcs/UI/Commands.hs 21
+    , Basic(..)
+    , Advanced(..)
+    , commandDefaults
+    , commandCheckOptions
hunk ./src/Darcs/UI/Commands.hs 83
-import Darcs.UI.Options ( DarcsOption, DarcsOptDescr, (^), optDescr, odesc, parseFlags )
+import Darcs.UI.Options
+    ( DarcsOption, DarcsOptDescr, (^), optDescr
+    , odesc, parseFlags, defaultFlags, ocheck )
hunk ./src/Darcs/UI/Commands.hs 138
-          , commandBasicOptions :: [DarcsOptDescr DarcsFlag]
-          , commandAdvancedOptions :: [DarcsOptDescr DarcsFlag]
-          , commandDefaults :: [DarcsFlag]
-          , commandCheckOptions :: [DarcsFlag] -> [String]
+          , commandBasicOptionsSpec :: forall b . Basic b
+          , commandAdvancedOptionsSpec :: forall b . Advanced b
hunk ./src/Darcs/UI/Commands.hs 150
+commandBasicOptions :: DarcsCommand -> [DarcsOptDescr DarcsFlag]
+commandBasicOptions cmd = case commandBasicOptionsSpec cmd of Basic b -> odesc b
+
+commandAdvancedOptions :: DarcsCommand -> [DarcsOptDescr DarcsFlag]
+commandAdvancedOptions cmd = case commandAdvancedOptionsSpec cmd of Advanced a -> odesc a
+
+commandDefaults :: DarcsCommand -> [DarcsFlag]
+commandDefaults cmd =
+    case commandAdvancedOptionsSpec cmd of
+         Advanced a ->
+             case commandBasicOptionsSpec cmd of
+                 Basic b -> defaultFlags (b `withStdOpts` a)
+
+commandCheckOptions :: DarcsCommand -> [DarcsFlag] -> [String]
+commandCheckOptions cmd =
+    case commandAdvancedOptionsSpec cmd of
+         Advanced a ->
+             case commandBasicOptionsSpec cmd of
+                 Basic b -> ocheck (b `withStdOpts` a)
+
+data Basic b where
+    Basic :: DarcsOption (Maybe StdCmdAction -> Bool -> Bool -> Verbosity -> Bool -> b) c
+          -> Basic b
+
+data Advanced a where
+    Advanced :: DarcsOption (UseCache -> Maybe String -> Bool -> Maybe String -> Bool -> a) b
+             -> Advanced a
+
hunk ./src/Darcs/UI/Commands.hs 185
-commandAlloptions DarcsCommand { commandBasicOptions = opts1
-                               , commandAdvancedOptions = opts2 } =
-    ( opts1 ++ odesc stdCmdActions
-    , odesc anyVerbosity ++ opts2 ++ odesc useCache ++ odesc hooks )
+commandAlloptions cmd at DarcsCommand { } =
+    ( commandBasicOptions cmd ++ odesc stdCmdActions
+    , odesc anyVerbosity ++ commandAdvancedOptions cmd ++ odesc useCache ++ odesc hooks )
hunk ./src/Darcs/UI/Commands/Add.hs 53
-    ( DarcsCommand(..), withStdOpts, putInfo, putWarning, putVerboseWarning
+    ( DarcsCommand(..), Basic(..), Advanced(..)
+    , putInfo, putWarning, putVerboseWarning
hunk ./src/Darcs/UI/Commands/Add.hs 60
-import Darcs.UI.Options
-    ( DarcsOption
-    , (^), odesc, ocheck, defaultFlags, parseFlags )
+import Darcs.UI.Options ( (^), parseFlags )
hunk ./src/Darcs/UI/Commands/Add.hs 110
-addBasicOpts :: DarcsOption a
-                (Bool -> Bool -> Bool -> Bool -> Maybe String -> O.DryRun -> a)
-addBasicOpts = O.includeBoring
-             ^ O.allowProblematicFilenames
-             ^ O.recursive
-             ^ O.workingRepoDir
-             ^ O.dryRun
-
-addAdvancedOpts :: DarcsOption a (O.UMask -> a)
-addAdvancedOpts = O.umask
-
-addOpts :: DarcsOption a
-           (Bool
-            -> Bool
-            -> Bool
-            -> Bool
-            -> Maybe String
-            -> O.DryRun
-            -> Maybe O.StdCmdAction
-            -> Bool
-            -> Bool
-            -> O.Verbosity
-            -> Bool
-            -> O.UMask
-            -> O.UseCache
-            -> Maybe String
-            -> Bool
-            -> Maybe String
-            -> Bool
-            -> a)
-addOpts = withStdOpts addBasicOpts addAdvancedOpts
-
hunk ./src/Darcs/UI/Commands/Add.hs 123
-    , commandAdvancedOptions      = odesc addAdvancedOpts
-    , commandBasicOptions         = odesc addBasicOpts
-    , commandDefaults             = defaultFlags addOpts
-    , commandCheckOptions         = ocheck addOpts
+    , commandBasicOptionsSpec     = Basic (O.includeBoring ^
+                                           O.allowProblematicFilenames ^
+                                           O.recursive ^
+                                           O.workingRepoDir ^
+                                           O.dryRun)
+    , commandAdvancedOptionsSpec  = Advanced O.umask
hunk ./src/Darcs/UI/Commands/Clone.hs 36
-import Darcs.UI.Commands ( DarcsCommand(..), withStdOpts
+import Darcs.UI.Commands ( DarcsCommand(..), Basic(..), Advanced(..)
hunk ./src/Darcs/UI/Commands/Clone.hs 50
-import Darcs.UI.Options ( DarcsOption, (^), odesc, ocheck, defaultFlags, parseFlags )
+import Darcs.UI.Options ( (^), parseFlags )
hunk ./src/Darcs/UI/Commands/Clone.hs 111
-cloneBasicOpts :: DarcsOption a
-                  (Maybe String
-                   -> CloneKind
-                   -> [O.MatchFlag]
-                   -> Maybe Bool
-                   -> O.SetScriptsExecutable
-                   -> O.WithWorkingDir
-                   -> a)
-cloneBasicOpts = O.reponame
-               ^ O.partial
-               ^ O.matchOneContext
-               ^ O.setDefault
-               ^ O.setScriptsExecutable
-               ^ O.useWorkingDir
-
-cloneAdvancedOpts :: DarcsOption a (Bool -> O.PatchIndexOption -> O.NetworkOptions -> a)
-cloneAdvancedOpts = O.usePacks ^ O.patchIndex ^ O.network
-
-cloneOpts :: DarcsOption a
-             (Maybe String
-              -> CloneKind
-              -> [O.MatchFlag]
-              -> Maybe Bool
-              -> O.SetScriptsExecutable
-              -> O.WithWorkingDir
-              -> Maybe O.StdCmdAction
-              -> Bool
-              -> Bool
-              -> O.Verbosity
-              -> Bool
-              -> Bool
-              -> O.PatchIndexOption
-              -> O.NetworkOptions
-              -> O.UseCache
-              -> Maybe String
-              -> Bool
-              -> Maybe String
-              -> Bool
-              -> a)
-cloneOpts = cloneBasicOpts `withStdOpts` cloneAdvancedOpts
-
hunk ./src/Darcs/UI/Commands/Clone.hs 123
-    , commandAdvancedOptions = odesc cloneAdvancedOpts
-    , commandBasicOptions = odesc cloneBasicOpts
-    , commandDefaults = defaultFlags cloneOpts
-    , commandCheckOptions = ocheck cloneOpts
+    , commandBasicOptionsSpec = Basic (O.reponame ^
+                                       O.partial ^
+                                       O.matchOneContext ^
+                                       O.setDefault ^
+                                       O.setScriptsExecutable ^
+                                       O.useWorkingDir)
+    , commandAdvancedOptionsSpec = Advanced (O.usePacks ^ O.patchIndex ^ O.network)
hunk ./src/Darcs/UI/Commands/Convert.hs 130
-                           CommandControl(CommandData), withStdOpts )
-import Darcs.UI.Options ( DarcsOption, (^), odesc, ocheck, defaultFlags, parseFlags )
+                           CommandControl(CommandData), Basic(..), Advanced(..) )
+import Darcs.UI.Options ( DarcsOption, (^), parseFlags )
hunk ./src/Darcs/UI/Commands/Convert.hs 210
-convertDarcs2Opts :: DarcsOption a
-                     (Maybe String
-                      -> O.SetScriptsExecutable
-                      -> O.WithWorkingDir
-                      -> Maybe O.StdCmdAction
-                      -> Bool
-                      -> Bool
-                      -> O.Verbosity
-                      -> Bool
-                      -> O.NetworkOptions
-                      -> O.PatchIndexOption
-                      -> O.UseCache
-                      -> Maybe String
-                      -> Bool
-                      -> Maybe String
-                      -> Bool
-                      -> a)
-convertDarcs2Opts = convertDarcs2BasicOpts `withStdOpts` convertDarcs2AdvancedOpts
-
hunk ./src/Darcs/UI/Commands/Convert.hs 221
-    , commandAdvancedOptions = odesc convertDarcs2AdvancedOpts
-    , commandBasicOptions = odesc convertDarcs2BasicOpts
-    , commandDefaults = defaultFlags convertDarcs2Opts
-    , commandCheckOptions = ocheck convertDarcs2Opts
+    , commandAdvancedOptionsSpec = Advanced convertDarcs2AdvancedOpts
+    , commandBasicOptionsSpec = Basic convertDarcs2BasicOpts
hunk ./src/Darcs/UI/Commands/Convert.hs 232
-convertExportOpts :: DarcsOption a
-                     (Maybe String
-                      -> Maybe String
-                      -> Maybe String
-                      -> Maybe O.StdCmdAction
-                      -> Bool
-                      -> Bool
-                      -> O.Verbosity
-                      -> Bool
-                      -> O.NetworkOptions
-                      -> O.UseCache
-                      -> Maybe String
-                      -> Bool
-                      -> Maybe String
-                      -> Bool
-                      -> a)
-convertExportOpts = convertExportBasicOpts `withStdOpts` convertExportAdvancedOpts
-
hunk ./src/Darcs/UI/Commands/Convert.hs 244
-    , commandAdvancedOptions = odesc convertExportAdvancedOpts
-    , commandBasicOptions = odesc convertExportBasicOpts
-    , commandDefaults = defaultFlags convertExportOpts
-    , commandCheckOptions = ocheck convertExportOpts
+    , commandAdvancedOptionsSpec = Advanced convertExportAdvancedOpts
+    , commandBasicOptionsSpec = Basic convertExportBasicOpts
hunk ./src/Darcs/UI/Commands/Convert.hs 263
-convertImportOpts :: DarcsOption a
-                     (Maybe String
-                      -> O.SetScriptsExecutable
-                      -> O.PatchFormat
-                      -> O.WithWorkingDir
-                      -> Maybe O.StdCmdAction
-                      -> Bool
-                      -> Bool
-                      -> O.Verbosity
-                      -> Bool
-                      -> O.PatchIndexOption
-                      -> O.UseCache
-                      -> Maybe String
-                      -> Bool
-                      -> Maybe String
-                      -> Bool
-                      -> a)
-convertImportOpts = convertImportBasicOpts `withStdOpts` convertImportAdvancedOpts
-
hunk ./src/Darcs/UI/Commands/Convert.hs 275
-    , commandAdvancedOptions = odesc convertImportAdvancedOpts
-    , commandBasicOptions = odesc convertImportBasicOpts
-    , commandDefaults = defaultFlags convertImportOpts
-    , commandCheckOptions = ocheck convertImportOpts
+    , commandAdvancedOptionsSpec = Advanced convertImportAdvancedOpts
+    , commandBasicOptionsSpec = Basic convertImportBasicOpts
hunk ./src/Darcs/UI/Commands/Diff.hs 37
-import Darcs.UI.Commands ( DarcsCommand(..), withStdOpts, nodefaults, amInHashedRepository )
+import Darcs.UI.Commands ( DarcsCommand(..), Basic(..), Advanced(..), nodefaults, amInHashedRepository )
hunk ./src/Darcs/UI/Commands/Diff.hs 41
-import Darcs.UI.Options ( DarcsOption, (^), odesc, ocheck, defaultFlags, parseFlags )
+import Darcs.UI.Options ( DarcsOption, (^), parseFlags )
hunk ./src/Darcs/UI/Commands/Diff.hs 122
-diffOpts :: DarcsOption a
-            ([O.MatchFlag]
-             -> O.ExternalDiff
-             -> Bool
-             -> Maybe String
-             -> Bool
-             -> Maybe O.StdCmdAction
-             -> Bool
-             -> Bool
-             -> O.Verbosity
-             -> Bool
-             -> WantGuiPause
-             -> O.UseCache
-             -> Maybe String
-             -> Bool
-             -> Maybe String
-             -> Bool
-             -> a)
-diffOpts = diffBasicOpts `withStdOpts` diffAdvancedOpts
-
hunk ./src/Darcs/UI/Commands/Diff.hs 134
-    , commandAdvancedOptions = odesc diffAdvancedOpts
-    , commandBasicOptions = odesc diffBasicOpts
-    , commandDefaults = defaultFlags diffOpts
-    , commandCheckOptions = ocheck diffOpts
+    , commandAdvancedOptionsSpec = Advanced diffAdvancedOpts
+    , commandBasicOptionsSpec = Basic diffBasicOpts

Context:

[integrate new options subsystem
Ben Franksen <benjamin.franksen at helmholtz-berlin.de>**20141104223757
 Ignore-this: 9636f6d007ba4241b19b9b964bf886a3
 
 The conversion is complete in the sense that the old Darcs.UI.Arguments is
 now obsolete and can be removed. Command options are specified using the new
 "typed" DarcsOption type from Darcs.UI.Options. All available tests succeed.
 
 However, it is incomplete in the sense that there are still many places
 where the list of DarcsFlag is scanned or manipulated directly. Removing
 these direct accesses will be an on-going effort; when it is complete we can
 replace [DarcsFlag] with an abstract data type.
 
 This patch contains an almost complete re-implementation of
 Darcs.UI.ArgumentDefaults under the new name Darcs.UI.Defaults. This adds a
 new dependency on regex-applicative, see the comments in the code.
 
 I have also made the tentative change of using a command specific
 configuration record for two of the commands, namely "record" and "amend".
 It remains to be seen whether this is the right approach and the other
 commands should follow it.
 
 Rebased by Ganesh Sittampalam <ganesh at earth.li> to integrate with the latest
 darcs code. Originally in two patches that first introduced and then
 switched to the new code; I merged them into one to make the rebasing easier.
 
] 
[Work around haskell-src-exts (and hence hlint) parse errors
Ganesh Sittampalam <ganesh at earth.li>**20141029163818
 Ignore-this: 3e77eceae03d2f001b7a98779b9ea88a
] 
[resolve conflicts
Ganesh Sittampalam <ganesh at earth.li>**20141025160030
 Ignore-this: 7a42ce435cad0afcdad55c8eab3d6599
] 
[initial version of 'rebase changes' command
Ganesh Sittampalam <ganesh at earth.li>**20130311182415
 Ignore-this: dc58615c9d248c61a588ba6e1ab3eab6
] 
[make getChangesInfo take a PatchFilter instead of a Repository
Ganesh Sittampalam <ganesh at earth.li>**20130218234725
 Ignore-this: 96e88fa9f0c4eab1f68080484006c63d
] 
[bundle up checking for patch index and using it
Ganesh Sittampalam <ganesh at earth.li>**20130218233321
 Ignore-this: a253261a2b5eefbf7113af27694d6beb
] 
[minimize bundle contexts by default, allow ctrl-c or --no-minimize
Guillaume Hoffmann <guillaumh at gmail.com>**20141017174032
 Ignore-this: 3a75c1ef6dce9d8d72e6187f7b6bf91
] 
[resolve issue2409: implement darcs rebase apply
Ganesh Sittampalam <ganesh at earth.li>**20141022073448
 Ignore-this: a1c0c535bc3c0a80208d5c0a66f24a3d
] 
[switch applyCmd to use the PatchApplier abstraction
Ganesh Sittampalam <ganesh at earth.li>**20141022005542
 Ignore-this: e4bd8bf03aaaacaf3ab4d56db652ef02
] 
[reuse the standard pullCmd for rebase
Ganesh Sittampalam <ganesh at earth.li>**20141022002250
 Ignore-this: 9dd91d42805e4641bbcbd4d168d4d8a2
 
 This involves a rather complicated abstraction that would be major overkill
 for the approximately 6 lines of copy and pasted code that it saves.
 
 However it should extend to applyCmd, which is substantially bigger.
 
] 
[generalise applyPatchesForRebase along the same lines as applyPatches
Ganesh Sittampalam <ganesh at earth.li>**20141021195533
 Ignore-this: bb7a08b357fa17aaa68f4535c8d24049
] 
[Share applyPatches code between pull and apply
Ganesh Sittampalam <ganesh at earth.li>**20141021160825
 Ignore-this: e36dbb1dafe019cd55900b5a76561bc0
 
 Abstract the applyPatches function from the apply command, and make pull
 use it.
 
 This means the following changes to apply:
 
  - The outcome is now displayed using 'putInfo', which means it will
    respect options like '-q' where it didn't before. This seems reasonable.
 
 It means the following changes to pull:
 
  - We now call 'setEnvDarcsPatches'. This seems reasonable.
 
  - We now call 'withSignalsBlocked' when applying patches. I think this is
    harmless or an improvement.
 
  - The output messages are a bit more generic, but I don't think any important
    detail is lost.
 
  - We now call 'redirectOutput' around the messages. --reply isn't passed
    to pull so this should make no difference.
 
] 
[--minimize for obliterate -O
Guillaume Hoffmann <guillaumh at gmail.com>**20141015210534
 Ignore-this: a99c974c6d42d0a27643214b48cb70c9
] 
[resolve issue1514: send --minimize-context flag for send
Guillaume Hoffmann <guillaumh at gmail.com>**20141015210457
 Ignore-this: 486b70607488643e092bb8f46cd046d4
] 
[use now -h and --hash as shortcut flags to match on patch hash
Guillaume Hoffmann <guillaumh at gmail.com>**20141008185829
 Ignore-this: a8caae8a4ef50049fae3954867f2e3a7
] 
[Resolve issue2249: Rename isFile to isValidLocalPath and WorkRepoURL to WorkRepoPossibleURL
mle at mlen.pl**20140928102835
 Ignore-this: 7273172e1131a0a6870f1d203d241b97
] 
[print an informative message after rollback
Ganesh Sittampalam <ganesh at earth.li>**20140725204057
 Ignore-this: dc5d37deeb3cc5455ff10920a531dd38
] 
[switch from deprecated System.Cmd to System.Process
Ganesh Sittampalam <ganesh at earth.li>**20140926163517
 Ignore-this: 5a05007a7e868cebe16252262337756
] 
[support mtl 2.2
Ganesh Sittampalam <ganesh at earth.li>**20140926155729
 Ignore-this: 868ab98d5f71b026ba87f0053f67c69d
] 
[remove creator-hash flag unused since annotate rewrite
Guillaume Hoffmann <guillaumh at gmail.com>**20140825195932
 Ignore-this: 2a857b399a1815d78ef95b5d18f8ba2a
] 
[New option "--reorder" for the command rebase pull.
Ale Gadea <alex.aegf at gmail.com>**20140709003350
 Ignore-this: cf17849e0ff84b4dd72f3bac47572e2
 The option --reorder moves to the top the uncommon set
 of patches between the current repository and remote
 repository.
] 
[New option "--reorder" for the command pull and apply.
Ale Gadea <alex.aegf at gmail.com>**20140709003342
 Ignore-this: e2b2d705d2d515dc5b54201be4f7c76f
 The option --reorder moves to the top the uncommon
 set of patches between the current repository and remote
 repository.
] 
[replaced duplicate DiffAlgorithm in Darcs.Repository.Flags with re-export
Ben Franksen <benjamin.franksen at helmholtz-berlin.de>**20140629235443
 Ignore-this: 8135bf861d054d75f5ee4ce9116ea208
] 
[Darcs.Repository.Flags: added Show instances for all types
Ben Franksen <benjamin.franksen at helmholtz-berlin.de>**20140629112323
 Ignore-this: 27f18b99ebbc4f09f7c2bf8f6953ff2d
] 
[Darcs.Repository.Flags: added Eq instance for UseIndex
Ben Franksen <benjamin.franksen at helmholtz-berlin.de>**20140613093130
 Ignore-this: 925bd846affdc9566fd4de260b296d39
] 
[clarify naming of applyPatches functions
Ganesh Sittampalam <ganesh at earth.li>**20141021140658
 Ignore-this: 71936b7fbc48182b6c54b106f1603db3
] 
[resolve issue1624: bucketed cache.
Marcio Diaz <marcio.diaz at gmail.com>**20140716102401
 Ignore-this: 2d077f5c10156e4a00631fbc4f8c3119
] 
[enable to match on patch hash prefix and ignore case
Guillaume Hoffmann <guillaumh at gmail.com>**20140724132850
 Ignore-this: d0e43fceb3682dff95b51e51d84729e8
] 
[show patch hash in UI and put author and date on separate lines
Guillaume Hoffmann <guillaumh at gmail.com>**20140724131644
 Ignore-this: 225478cb9a7a1c82c73668ed12e27a46
 
 some cleanups:
 * use correctly makePatchname instead of makeFilename in other
   places of the code
 * remove unused RepoPatchInfo
 * remove unused idpatchinfo
 * remove unused makeAltFilename
 * remove unused HTML class instance of PatchInfo 
] 
[Always use MyersDiff when removing a file - the diff will be identical
Owen Stephens <darcs at owenstephens.co.uk>**20140511150625
 Ignore-this: 5d81f5802cca1fd0f9d9b61f7e3500d3
] 
[Tidy up of Move - refactor out some common code
Owen Stephens <darcs at owenstephens.co.uk>**20140511115159
 Ignore-this: 270727265518e70b6c2849e7b2db3366
] 
[Allow post-hoc moves to known paths
Owen Stephens <darcs at owenstephens.co.uk>**20140430023525
 Ignore-this: f5f0b4d7a90e32b8f4e8a0eed47d2022
 The new behaviour is to record patches that first delete the original contents,
 before adding the move patch 
] 
[Resolve issue2380: allow darcs mv into known, but deleted in working, file
Owen Stephens <darcs at owenstephens.co.uk>**20140424211940
 Ignore-this: 8c4f8d77480dd360d051b944dc22c6d
] 
[Tidy up checkNewAndOldFilenames in the Move command
Owen Stephens <darcs at owenstephens.co.uk>**20140422235835
 Ignore-this: f5c0fb784b1d9a69f7d2641f9111e580
] 
[remove patch index flags from rollback command
Guillaume Hoffmann <guillaumh at gmail.com>**20140612170904
 Ignore-this: 342ccf1ce50dd76b5af334df2298f63
] 
[resolve issue2396: make convert a supercommand and enhance help strings
Guillaume Hoffmann <guillaumh at gmail.com>**20140610210546
 Ignore-this: 41493c28dab5a745b1d2c7107212724e
] 
[marksfile support for convert --export
Guillaume Hoffmann <guillaumh at gmail.com>**20140609190214
 Ignore-this: 154f9a34ec7c65eaa64ab42462c60705
] 
[Resolve Issue2361: optimize --reorder runs forever with one repository
Ale Gadea <alex.aegf at gmail.com>**20140605210012
 Ignore-this: b18bc37e5d6668df62f05679c629e08c
] 
[factorize boilerplate of optimize subcommands
Guillaume Hoffmann <guillaumh at gmail.com>**20140605174035
 Ignore-this: 13cc1ac6f5a70fd96815dca2ab12f76c
] 
[resolve issue2394: make optimize a supercommand
Guillaume Hoffmann <guillaumh at gmail.com>**20140603201207
 Ignore-this: 841fbf0c5e0017eaff8b87b75ad80a37
] 
[make optimize command respect --quiet by using putInfo
benjamin.franksen at helmholtz-berlin.de**20140511105622
 Ignore-this: f4a139619c68470fe821929958a910b
] 
[darcs.cabal: make Haskell2010 the default-language for all stanzas
benjamin.franksen at helmholtz-berlin.de**20140511102244
 Ignore-this: 44afc0f4c5b5de0751edd2f99764dc20
 
 This implied some more changes: we must demand cabal version >= 1.10, and
 change the extensions fields to default-extensions; in the implementation of
 some of the commands, needed to fix the indentation of do blocks.
] 
[implement doFastZip to create zip archive from pristine tree
Guillaume Hoffmann <guillaumh at gmail.com>**20140516190946
 Ignore-this: 483ef7fffc417a4811d2d8cd90885e18
] 
[Accept issue2382: darcs is confused if a dir is moved inplace of a file
Owen Stephens <darcs at owenstephens.co.uk>**20140427225132
 Ignore-this: b4fef46928598bbc44c61325f6dc11b2
] 
[Resolve Issue2244: darcs tag should warn about duplicate tags
Ale Gadea <alex.aegf at gmail.com>**20140507183109
 Ignore-this: 8d25e1130bff79907d3db39d02f40197
 Make darcs tag t, with t already an existing tag, cause a warning message.
] 
[Allow options with path arguments to be specified in defaults file
benjamin.franksen at helmholtz-berlin.de**20140404192946
 Ignore-this: ff2ff9e6d96a06c4a8df29b3c9819b22
] 
[fixed cut-n-paste error in haddock comment
benjamin.franksen at helmholtz-berlin.de**20140403224430
 Ignore-this: 7e5b9fe7bbecbb52d8b639772b0fd208
] 
[resolve issue2314: output-auto-name in defaults file
benjamin.franksen at helmholtz-berlin.de**20140403170012
 Ignore-this: 6dbd187b78bc2b108920cc0eaabfa5af
] 
[resolve issue1268: enable to write darcs init x
Guillaume Hoffmann <guillaumh at gmail.com>**20140425200752
 Ignore-this: 2586d59ba17f94b655c3a48df80b5d66
 Original patch by Radoslav Dorcik 
] 
[rename get to clone
Guillaume Hoffmann <guillaumh at gmail.com>**20140425175210
 Ignore-this: 2c27cb2bc6a9978988386743b241c0b3
] 
[remove Put since Get can clone to ssh destination faster
Guillaume Hoffmann <guillaumh at gmail.com>**20140425063225
 Ignore-this: c0dbc05fc7511977381abba47728810a
] 
[resolve issue1066: clone to ssh URL by locally cloning then copying by scp
Guillaume Hoffmann <guillaumh at gmail.com>**20140425060647
 Ignore-this: 2778bc4774fe8d5c53d0011b2193c1c2
 Introduce an internal flag ForgetParent that enable to clone
 repositories while forgetting about their source (do not copy
 sources nor caches).
] 
[do not tolerate ctrl+c when --complete is passed
Guillaume Hoffmann <guillaumh at gmail.com>**20140425053440
 Ignore-this: 856378499c61de4e4281d1ed966ede76
] 
[do not print message twice when patches pack grabbing fails
Guillaume Hoffmann <guillaumh at gmail.com>**20140424165929
 Ignore-this: 148f8ca132725e81dd52d64f00cbd24b
] 
[create inventories subdir at darcs init
Guillaume Hoffmann <guillaumh at gmail.com>**20140421133938
 Ignore-this: 5ace4beaf6c27c8a5105d74db977f61a
] 
[TAG 2.9.9
Ganesh Sittampalam <ganesh at earth.li>**20140424063828
 Ignore-this: ae3cb4369f15af8cb2f19d6f5603d935
] 
Patch bundle hash:
cde0c9f8b2c9e283f9259ce4f1fcb340b4bafd5b


More information about the darcs-devel mailing list