branchmap: update cache of 'unserved' filter on new changesets
The `commitctx` and `addchangegroup` methods of repo upgrade branchcache after
completion. This behavior aims to keep the branchcache in sync for read only
process as hgweb. See
ee317dbfb9d0 for details.
Since changelog filtering is used, those calls only update the cache for unfiltered repo.
One of no interest for typical read only process like hgweb.
Note: By chance in basic case, `repo.unfiltered() == repo.filtered('unserved')`
This changesets have the "unserved" cache updated instead. I think this is the
only cache that matter for hgweb.
We could imagine updating all possible branchcaches instead but:
- I'm not sure it would have any benefit impact. It may even increase the odd of
all cache being invalidated.
- This is more complicated change.
So I'm going for updating a single cache only which is already better that
updating a cache nobody cares about.
This changeset have a few expected impact on the testsuite are different cache
are updated.
$ cat >> $HGRCPATH <<EOF
> [extensions]
> graphlog=
> rebase=
> mq=
>
> [mq]
> plain=true
>
> [alias]
> tglog = log -G --template "{rev}: '{desc}' tags: {tags}\n"
> EOF
$ hg init a
$ cd a
$ hg qinit -c
$ echo c1 > f
$ hg add f
$ hg ci -m C1
$ echo r1 > f
$ hg ci -m R1
$ hg up -q 0
$ hg qnew f.patch
$ echo mq1 > f
$ hg qref -m P0
$ hg qnew f2.patch
$ echo mq2 > f
$ hg qref -m P1
$ hg tglog
@ 3: 'P1' tags: f2.patch qtip tip
|
o 2: 'P0' tags: f.patch qbase
|
| o 1: 'R1' tags:
|/
o 0: 'C1' tags: qparent
Rebase - try to rebase on an applied mq patch:
$ hg rebase -s 1 -d 3
abort: cannot rebase onto an applied mq patch
[255]
Rebase - same thing, but mq patch is default dest:
$ hg up -q 1
$ hg rebase
abort: cannot rebase onto an applied mq patch
[255]
$ hg up -q qtip
Rebase - generate a conflict:
$ hg rebase -s 2 -d 1
merging f
warning: conflicts during merge.
merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
abort: unresolved conflicts (see hg resolve, then hg rebase --continue)
[255]
Fix the 1st conflict:
$ echo mq1r1 > f
$ hg resolve -m f
$ hg rebase -c
merging f
warning: conflicts during merge.
merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
abort: unresolved conflicts (see hg resolve, then hg rebase --continue)
[255]
Fix the 2nd conflict:
$ echo mq1r1mq2 > f
$ hg resolve -m f
$ hg rebase -c
saved backup bundle to $TESTTMP/a/.hg/strip-backup/*-backup.hg (glob)
$ hg tglog
@ 3: 'P1' tags: f2.patch qtip tip
|
o 2: 'P0' tags: f.patch qbase
|
o 1: 'R1' tags: qparent
|
o 0: 'C1' tags:
$ hg up -q qbase
$ cat f
mq1r1
$ cat .hg/patches/f.patch
# HG changeset patch
# User test
# Date ?????????? ? (glob)
# Node ID ???????????????????????????????????????? (glob)
# Parent bac9ed9960d8992bcad75864a879fa76cadaf1b0
P0
diff -r bac9ed9960d8 -r ???????????? f (glob)
--- a/f Thu Jan 01 00:00:00 1970 +0000
+++ b/f ??? ??? ?? ??:??:?? ???? ????? (glob)
@@ -1,1 +1,1 @@
-r1
+mq1r1
Update to qtip:
$ hg up -q qtip
$ cat f
mq1r1mq2
$ cat .hg/patches/f2.patch
# HG changeset patch
# User test
# Date ?????????? ? (glob)
# Node ID ???????????????????????????????????????? (glob)
# Parent ???????????????????????????????????????? (glob)
P1
diff -r ???????????? -r ???????????? f (glob)
--- a/f ??? ??? ?? ??:??:?? ???? ????? (glob)
+++ b/f ??? ??? ?? ??:??:?? ???? ????? (glob)
@@ -1,1 +1,1 @@
-mq1r1
+mq1r1mq2
Adding one git-style patch and one normal:
$ hg qpop -a
popping f2.patch
popping f.patch
patch queue now empty
$ rm -fr .hg/patches
$ hg qinit -c
$ hg up -q 0
$ hg qnew --git f_git.patch
$ echo mq1 > p
$ hg add p
$ hg qref --git -m 'P0 (git)'
$ hg qnew f.patch
$ echo mq2 > p
$ hg qref -m P1
$ hg qci -m 'save patch state'
$ hg qseries -s
f_git.patch: P0 (git)
f.patch: P1
$ hg -R .hg/patches manifest
.hgignore
f.patch
f_git.patch
series
$ cat .hg/patches/f_git.patch
P0 (git)
diff --git a/p b/p
new file mode 100644
--- /dev/null
+++ b/p
@@ -0,0 +1,1 @@
+mq1
$ cat .hg/patches/f.patch
P1
diff -r ???????????? p (glob)
--- a/p ??? ??? ?? ??:??:?? ???? ????? (glob)
+++ b/p ??? ??? ?? ??:??:?? ???? ????? (glob)
@@ -1,1 +1,1 @@
-mq1
+mq2
Rebase the applied mq patches:
$ hg rebase -s 2 -d 1
saved backup bundle to $TESTTMP/a/.hg/strip-backup/*-backup.hg (glob)
$ hg qci -m 'save patch state'
$ hg qseries -s
f_git.patch: P0 (git)
f.patch: P1
$ hg -R .hg/patches manifest
.hgignore
f.patch
f_git.patch
series
$ cat .hg/patches/f_git.patch
# HG changeset patch
# User test
# Date ?????????? ? (glob)
# Node ID ???????????????????????????????????????? (glob)
# Parent bac9ed9960d8992bcad75864a879fa76cadaf1b0
P0 (git)
diff --git a/p b/p
new file mode 100644
--- /dev/null
+++ b/p
@@ -0,0 +1,1 @@
+mq1
$ cat .hg/patches/f.patch
# HG changeset patch
# User test
# Date ?????????? ? (glob)
# Node ID ???????????????????????????????????????? (glob)
# Parent ???????????????????????????????????????? (glob)
P1
diff -r ???????????? -r ???????????? p (glob)
--- a/p ??? ??? ?? ??:??:?? ???? ????? (glob)
+++ b/p ??? ??? ?? ??:??:?? ???? ????? (glob)
@@ -1,1 +1,1 @@
-mq1
+mq2
$ cd ..
Rebase with guards
$ hg init foo
$ cd foo
$ echo a > a
$ hg ci -Am a
adding a
Create mq repo with guarded patches foo and bar and empty patch:
$ hg qinit
$ echo guarded > guarded
$ hg add guarded
$ hg qnew guarded
$ hg qnew empty-important -m 'important commit message'
$ echo bar > bar
$ hg add bar
$ hg qnew bar
$ echo foo > foo
$ hg add foo
$ hg qnew foo
$ hg qpop -a
popping foo
popping bar
popping empty-important
popping guarded
patch queue now empty
$ hg qguard guarded +guarded
$ hg qguard bar +baz
$ hg qguard foo +baz
$ hg qselect baz
number of unguarded, unapplied patches has changed from 1 to 3
$ hg qpush bar
applying empty-important
patch empty-important is empty
applying bar
now at: bar
$ hg qguard -l
guarded: +guarded
empty-important: unguarded
bar: +baz
foo: +baz
$ hg tglog
@ 2: 'imported patch bar' tags: bar qtip tip
|
o 1: 'important commit message' tags: empty-important qbase
|
o 0: 'a' tags: qparent
Create new head to rebase bar onto:
$ hg up -C 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo b > b
$ hg add b
$ hg ci -m b
created new head
$ hg up -C 2
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo a >> a
$ hg qref
$ hg tglog
@ 3: '[mq]: bar' tags: bar qtip tip
|
| o 2: 'b' tags:
| |
o | 1: 'important commit message' tags: empty-important qbase
|/
o 0: 'a' tags: qparent
Rebase bar (make sure series order is preserved and empty-important also is
removed from the series):
$ hg qseries
guarded
empty-important
bar
foo
$ [ -f .hg/patches/empty-important ]
$ hg -q rebase -d 2
$ hg qseries
guarded
bar
foo
$ [ -f .hg/patches/empty-important ]
[1]
$ hg qguard -l
guarded: +guarded
bar: +baz
foo: +baz
$ hg tglog
@ 2:* '[mq]: bar' tags: bar qbase qtip tip (glob)
|
o 1:* 'b' tags: qparent (glob)
|
o 0:* 'a' tags: (glob)
$ cd ..