Make hg add foo; hg mv foo bar work.
- foo will be removed (the user has a copy of its contents in bar)
- bar will not be marked as a copy (there was no committed version of foo).
We print a warning telling that to the user.
Fixes
issue269.
% help
mq extension - patch management and development
This extension lets you work with a stack of patches in a Mercurial
repository. It manages two stacks of patches - all known patches, and
applied patches (subset of known patches).
Known patches are represented as patch files in the .hg/patches
directory. Applied patches are both patch files and changesets.
Common tasks (use "hg help command" for more details):
prepare repository to work with patches qinit
create new patch qnew
import existing patch qimport
print patch series qseries
print applied patches qapplied
print name of top applied patch qtop
add known patch to applied stack qpush
remove patch from applied stack qpop
refresh contents of top applied patch qrefresh
list of commands:
qapplied print the patches already applied
qclone clone main and patch repository at same time
qcommit commit changes in the queue repository
qdelete remove patches from queue
qdiff diff of the current patch
qfold fold the named patches into the current patch
qgoto push or pop patches until named patch is at top of stack
qguard set or print guards for a patch
qheader Print the header of the topmost or specified patch
qimport import a patch
qinit init a new queue repository
qnew create a new patch
qnext print the name of the next patch
qpop pop the current patch off the stack
qprev print the name of the previous patch
qpush push the next patch onto the stack
qrefresh update the current patch
qrename rename a patch
qrestore restore the queue state saved by a rev
qsave save current queue state
qselect set or print guarded patches to push
qseries print the entire series file
qtop print the name of the current patch
qunapplied print the patches not yet applied
strip strip a revision and all later revs on the same branch
use "hg -v help mq" to show aliases and global options
adding a
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
adding b/z
% qinit
% -R qinit
% qinit -c
A .hgignore
A series
% qnew implies add
A .hgignore
A series
A test.patch
% qinit; qinit -c
.hgignore:
syntax: glob
status
guards
series:
abort: repository already exists!
% qinit; <stuff>; qinit -c
adding .hg/patches/A
adding .hg/patches/B
A .hgignore
A A
A B
A series
.hgignore:
status
bleh
series:
A
B
% qnew -m
foo bar
% qrefresh
foo bar
diff -r xa
--- a/a
+++ b/a
@@ -1,1 +1,2 @@ a
a
+a
% empty qrefresh
revision:
patch:
foo bar
working dir diff:
--- a/a
+++ b/a
@@ -1,1 +1,2 @@ a
a
+a
% qpop
Patch queue now empty
% qpush
applying test.patch
Now at: test.patch
% pop/push outside repo
Patch queue now empty
applying test.patch
Now at: test.patch
% qrefresh in subdir
% pop/push -a in subdir
Patch queue now empty
applying test.patch
applying test2.patch
Now at: test2.patch
% qseries
test.patch
test2.patch
Now at: test.patch
0 A test.patch: foo bar
1 U test2.patch:
applying test2.patch
Now at: test2.patch
% qapplied
test.patch
test2.patch
% qtop
test2.patch
% qprev
test.patch
% qnext
All patches applied
% pop, qnext, qprev, qapplied
Now at: test.patch
test2.patch
Only one patch applied
test.patch
% commit should fail
abort: cannot commit over an applied mq patch
% push should fail
pushing to ../../k
abort: source has mq patches applied
% qunapplied
test2.patch
% qpush/qpop with index
applying test2.patch
Now at: test2.patch
Now at: test.patch
applying test1b.patch
Now at: test1b.patch
applying test2.patch
Now at: test2.patch
Now at: test1b.patch
Now at: test.patch
applying test1b.patch
applying test2.patch
Now at: test2.patch
% push should succeed
Patch queue now empty
pushing to ../../k
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
% qpush/qpop error codes
applying test.patch
applying test1b.patch
applying test2.patch
Now at: test2.patch
% pops all patches and succeeds
Patch queue now empty
qpop -a succeeds
% does nothing and succeeds
no patches applied
qpop -a succeeds
% fails - nothing else to pop
no patches applied
qpop fails
% pushes a patch and succeeds
applying test.patch
Now at: test.patch
qpush succeeds
% pops a patch and succeeds
Patch queue now empty
qpop succeeds
% pushes up to test1b.patch and succeeds
applying test.patch
applying test1b.patch
Now at: test1b.patch
qpush test1b.patch succeeds
% does nothing and succeeds
qpush: test1b.patch is already at the top
qpush test1b.patch succeeds
% does nothing and succeeds
qpop: test1b.patch is already at the top
qpop test1b.patch succeeds
% fails - can't push to this patch
abort: cannot push to a previous patch: test.patch
qpush test.patch fails
% fails - can't pop to this patch
abort: patch test2.patch is not applied
qpop test2.patch fails
% pops up to test.patch and succeeds
Now at: test.patch
qpop test.patch succeeds
% pushes all patches and succeeds
applying test1b.patch
applying test2.patch
Now at: test2.patch
qpush -a succeeds
% does nothing and succeeds
all patches are currently applied
qpush -a succeeds
% fails - nothing else to push
patch series already fully applied
qpush fails
% does nothing and succeeds
all patches are currently applied
qpush test2.patch succeeds
% strip
adding x
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
saving bundle to
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
% cd b; hg qrefresh
adding a
foo
diff -r cb9a9f314b8b a
--- a/a
+++ b/a
@@ -1,1 +1,2 @@ a
a
+a
diff -r cb9a9f314b8b b/f
--- /dev/null
+++ b/b/f
@@ -0,0 +1,1 @@
+f
% hg qrefresh .
foo
diff -r cb9a9f314b8b b/f
--- /dev/null
+++ b/b/f
@@ -0,0 +1,1 @@
+f
M a
% qpush failure
Patch queue now empty
applying foo
applying bar
1 out of 1 hunk ignored -- saving rejects to file foo.rej
patch failed, unable to continue (try -v)
patch failed, rejects left in working dir
Errors during apply, please fix and refresh bar
? foo
? foo.rej
% mq tags
0 qparent
1 qbase foo
2 qtip bar tip
new file
diff --git a/new b/new
new file mode 100755
--- /dev/null
+++ b/new
@@ -0,0 +1,1 @@
+foo
copy file
diff --git a/new b/copy
copy from new
copy to copy
Now at: new
applying copy
Now at: copy
diff --git a/new b/copy
copy from new
copy to copy
diff --git a/new b/copy
copy from new
copy to copy
1 files updated, 0 files merged, 2 files removed, 0 files unresolved
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
adding branch
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
Patch queue now empty
applying bar
Now at: bar
diff --git a/bar b/bar
new file mode 100644
--- /dev/null
+++ b/bar
@@ -0,0 +1,1 @@
+bar
diff --git a/foo b/baz
rename from foo
rename to baz
2 baz (foo)
diff --git a/bar b/bar
new file mode 100644
--- /dev/null
+++ b/bar
@@ -0,0 +1,1 @@
+bar
diff --git a/foo b/baz
rename from foo
rename to baz
2 baz (foo)
1 files updated, 0 files merged, 2 files removed, 0 files unresolved
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
adding branch
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
Patch queue now empty
applying bar
Now at: bar
diff --git a/foo b/bleh
rename from foo
rename to bleh
diff --git a/quux b/quux
new file mode 100644
--- /dev/null
+++ b/quux
@@ -0,0 +1,1 @@
+bar
3 bleh (foo)
diff --git a/foo b/barney
rename from foo
rename to barney
diff --git a/fred b/fred
new file mode 100644
--- /dev/null
+++ b/fred
@@ -0,0 +1,1 @@
+bar
3 barney (foo)
% strip again
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
merging foo
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
changeset: 3:99615015637b
tag: tip
parent: 2:20cbbe65cff7
parent: 1:d2871fc282d4
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: merge
changeset: 2:20cbbe65cff7
parent: 0:53245c60e682
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: change foo 2
changeset: 1:d2871fc282d4
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: change foo 1
changeset: 0:53245c60e682
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add foo
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
saving bundle to
saving bundle to
adding branch
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
changeset: 1:20cbbe65cff7
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: change foo 2
changeset: 0:53245c60e682
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add foo
% qclone
main repo:
rev 1: change foo
rev 0: add foo
patch repo:
rev 0: checkpoint
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
main repo:
rev 0: add foo
patch repo:
rev 0: checkpoint
Patch queue now empty
main repo:
rev 0: add foo
patch repo:
rev 0: checkpoint
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
main repo:
rev 0: add foo
patch repo:
rev 0: checkpoint