Mercurial > hg
view tests/test-mq-qqueue.t @ 30660:1f21a6835604
convert: add config option to copy extra keys from Git commits
Git commit objects support storing arbitrary key-value metadata. While
there is no user-facing mechanism in Git to record these values, some
tools do record data here.
Currently, `hg convert` only handles the "author," "committer," and
"parent" keys in Git commit objects. All other keys are ignored. This
means that any custom keys are lost when converting Git repos to
Mercurial.
This patch implements support for copying a whitelist of extra keys
from Git commit objects to the "extras" dict of the destination. As
the added tests demonstate, this allows extra metadata to be preserved
during the conversion process.
This patch stops short of converting all metadata to "extras." We could
potentially implement this via `convert.git.extrakeys=*` or similar.
But copying everything by default is a bit dangerous because if Git
adds new keys to commit objects, we could find ourselves copying
things that shouldn't be copied!
This patch also assumes the source key is the same as the destination
key. We could implement support for prefixing the output key to
distinguish it as coming from Git. But until this feature is needed,
I'm inclined to hold off implementing it.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 22 Dec 2016 23:28:11 -0700 |
parents | 4f2f0f367ef6 |
children |
line wrap: on
line source
$ echo "[extensions]" >> $HGRCPATH $ echo "mq=" >> $HGRCPATH $ hg init foo $ cd foo $ echo a > a $ hg ci -qAm a Default queue: $ hg qqueue patches (active) $ echo b > a $ hg qnew -fgDU somestuff Applied patches in default queue: $ hg qap somestuff Try to change patch (create succeeds, switch fails): $ hg qqueue foo --create abort: new queue created, but cannot make active as patches are applied [255] $ hg qqueue foo patches (active) Empty default queue: $ hg qpop popping somestuff patch queue now empty Switch queue: $ hg qqueue foo $ hg qqueue foo (active) patches List queues, quiet: $ hg qqueue --quiet foo patches Fail creating queue with already existing name: $ hg qqueue --create foo abort: queue "foo" already exists [255] $ hg qqueue foo (active) patches Create new queue for rename: $ hg qqueue --create bar $ hg qqueue bar (active) foo patches Rename queue, same name: $ hg qqueue --rename bar abort: can't rename "bar" to its current name [255] Rename queue to existing: $ hg qqueue --rename foo abort: queue "foo" already exists [255] Rename queue: $ hg qqueue --rename buz $ hg qqueue buz (active) foo patches Switch back to previous queue: $ hg qqueue foo $ hg qqueue --delete buz $ hg qqueue foo (active) patches Create queue for purge: $ hg qqueue --create purge-me $ hg qqueue foo patches purge-me (active) Create patch for purge: $ hg qnew patch-purge-me $ ls -1d .hg/patches-purge-me 2>/dev/null || true .hg/patches-purge-me $ hg qpop -a popping patch-purge-me patch queue now empty Purge queue: $ hg qqueue foo $ hg qqueue --purge purge-me $ hg qqueue foo (active) patches $ ls -1d .hg/patches-purge-me 2>/dev/null || true Unapplied patches: $ hg qun $ echo c > a $ hg qnew -fgDU otherstuff Fail switching back: $ hg qqueue patches abort: new queue created, but cannot make active as patches are applied [255] Fail deleting current: $ hg qqueue foo --delete abort: cannot delete currently active queue [255] Switch back and delete foo: $ hg qpop -a popping otherstuff patch queue now empty $ hg qqueue patches $ hg qqueue foo --delete $ hg qqueue patches (active) Tricky cases: $ hg qqueue store --create $ hg qnew journal $ hg qqueue patches store (active) $ hg qpop -a popping journal patch queue now empty $ hg qqueue patches $ hg qun somestuff Invalid names: $ hg qqueue test/../../bar --create abort: invalid queue name, may not contain the characters ":\/." [255] $ hg qqueue . --create abort: invalid queue name, may not contain the characters ":\/." [255] $ cd ..