如何在darcs中检查补丁的显式依赖关系?

时间:2016-01-08 03:07:24

标签: patch darcs

我们知道,darcs record --ask-deps可以记录显式补丁依赖关系。 (我看到的用途是防止" It's easy to move a patch that uses a feature to a point before the feature is introduced."。)

所以,拥有一个我应该制作这样的代表的回购,我想检查它是否属实。如何检查所选补丁的记录显式依赖关系?

谷歌可以在Darcs/UI/Commands/Rebase.hs中找到一些代码,如果补丁有这样的代码就打印出警告,但我还不知道是否有一个独立的命令可以提供这些信息(没有加入行动):

where doAdd :: (RepoPatch p, ApplyState p ~ Tree)
            => Repository (Rebasing p) wR wU wT
            -> FL (WDDNamed p) wT wT2
            -> HijackT IO (Repository (Rebasing p) wR wU wT2, FL (RebaseName p) wT2 wT2)
      doAdd repo NilFL = return (repo, NilFL)
      doAdd repo ((p :: WDDNamed p wT wU) :>:ps) = do
          case wddDependedOn p of
              [] -> return ()
              deps -> liftIO $ do
                  -- It might make sense to only print out this message once, but we might find
                  -- that the dropped dependencies are interspersed with other output,
                  -- e.g. if running with --ask-deps
                  putStr $ "Warning: dropping the following explicit "
                             ++ englishNum (length deps) (Noun "dependency") ":\n\n"
                  let printIndented n =
                          mapM_ (putStrLn . (replicate n ' '++)) . lines .
                          renderString Encode . showPatchInfo
                  putStrLn . renderString Encode . showPatchInfo .
                          patch2patchinfo $ wddPatch p
                  putStr " depended on:\n"
                  mapM_ (printIndented 2) deps
                  putStr "\n"
...

也许,输出.dpatch的命令会在dpatch中包含此信息。我现在应该检查一下。

根据我的实验,darcs log -vhttp://bugs.darcs.net/issue959)和darcs diff都不会输出此信息。

1 个答案:

答案 0 :(得分:0)

一种方法是使用.dpatch输出darcs send,然后查看。

这不是一种非常方便的方式,因为

  1. darcs send需要目标回购(即使使用-o FILE.dpatch);
  2. 几个补丁进入捆绑,而不是我们要检查的单个补丁...
  3. 以下是一个示例(我还检查过darcs log -v没有提供有关显式依赖项的信息):

    的制备:将

    $ mkdir test-darcs-deps
    $ cd test-darcs-deps/
    $ darcs init
    $ echo a > a
    $ darcs add a
    $ darcs rec -m A
    $ echo b > b
    $ darcs add b
    $ darcs rec -m B
    

    记录显式依赖关系:

    $ echo b2 > b
    $ darcs rec --ask-deps
    hunk ./b 1
    -b
    +b2
    Shall I record this change? (1/1)  [ynW...], or ? for more options: y
    Do you want to record these changes? [Yglqk...], or ? for more options: y
    patch 1f59d082f61f1fb8d57f5f5199869d1fc21b2435
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:07 MSK 2016
      * A
    Shall I depend on this patch? (1/1)  [ynW...], or ? for more options: y
    Do you want to depend on these patches? [Yglqk...], or ? for more options: y
    Finished recording patch 'B2'
    

    检查deps(我必须参考一个不相关的darcs repo in 命令darcs send起作用!):

    $ darcs send -o ../test-darcs-deps.dpatch
    Missing argument:  [REPOSITORY]
    Usage: darcs send [OPTION]... [REPOSITORY]
    Prepare a bundle of patches to be applied to some target repository.
    
    See darcs help send for details.
    
    $ darcs send -o ../test-darcs-deps.dpatch ../test-darcs
    HINT: if you want to change the default remote repository to
          /home/imz/tests/test-darcs,
          quit now and issue the same command with the --set-default flag.
    patch 1f59d082f61f1fb8d57f5f5199869d1fc21b2435
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:07 MSK 2016
      * A
    
        A ./a
    Shall I send this patch? (1/3)  [ynW...], or ? for more options: w
    patch 151c8321b2bc36df7ba09dcab0d17c853ed31577
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:32 MSK 2016
      * B
    
        A ./b
    Shall I send this patch? (2/3)  [ynW...], or ? for more options: w
    patch f697ac56e8241f5a906c010650b683638944ebf2
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:50 MSK 2016
      * B2
    
        M ./b -1 +1
    Shall I send this patch? (3/3)  [ynW...], or ? for more options: y
    Do you want to send these patches? [Yglqk...], or ? for more options: l
    ---- Already selected patches ----
    patch 151c8321b2bc36df7ba09dcab0d17c853ed31577
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:32 MSK 2016
      * B
    
        A ./b
    patch 1f59d082f61f1fb8d57f5f5199869d1fc21b2435
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:07 MSK 2016
      * A
    
        A ./a
    patch f697ac56e8241f5a906c010650b683638944ebf2
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:50 MSK 2016
      * B2
    
        M ./b -1 +1
    ---- end of already selected patches ----
    Do you want to send these patches? [Yglqk...], or ? for more options: y
    Minimizing context, to send with full context hit ctrl-C...
    File content did not change. Continue anyway? [yn]y
    

    依赖关系可以在输出中的尖括号中看到:

    [B2
    Ivan Zakharyaschev <imz@altlinux.org>**20160108222850
     Ignore-this: e8693b796cd3cac50bb19f4458ddb323
    ] 
    <
    [A
    Ivan Zakharyaschev <imz@altlinux.org>**20160108222807
     Ignore-this: 613cadd9266dac24e2bcd2dde97d969a
    ] 
    > hunk ./b 1
    -b
    +b2
    

    以下是完整输出:

    3 patches for repository /home/imz/tests/test-darcs:
    
    patch 151c8321b2bc36df7ba09dcab0d17c853ed31577
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:32 MSK 2016
      * B
    
    patch 1f59d082f61f1fb8d57f5f5199869d1fc21b2435
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:07 MSK 2016
      * A
    
    patch f697ac56e8241f5a906c010650b683638944ebf2
    Author: Ivan Zakharyaschev <imz@altlinux.org>
    Date:   Sat Jan  9 01:28:50 MSK 2016
      * B2
    
    New patches:
    
    [B
    Ivan Zakharyaschev <imz@altlinux.org>**20160108222832
     Ignore-this: 9558077a30e30ba3c99003a4418991d
    ] addfile ./b
    hunk ./b 1
    +b
    
    [A
    Ivan Zakharyaschev <imz@altlinux.org>**20160108222807
     Ignore-this: 613cadd9266dac24e2bcd2dde97d969a
    ] addfile ./a
    hunk ./a 1
    +a
    
    [B2
    Ivan Zakharyaschev <imz@altlinux.org>**20160108222850
     Ignore-this: e8693b796cd3cac50bb19f4458ddb323
    ] 
    <
    [A
    Ivan Zakharyaschev <imz@altlinux.org>**20160108222807
     Ignore-this: 613cadd9266dac24e2bcd2dde97d969a
    ] 
    > hunk ./b 1
    -b
    +b2
    
    Context:
    
    Patch bundle hash:
    f7ff61d69da702263b2ac613d3ca979ecab5b07b
    

    不太方便。

相关问题