Show More
@@ -0,0 +1,114 b'' | |||
|
1 | ========================================= | |
|
2 | Testing single head enforcement: Case A-1 | |
|
3 | ========================================= | |
|
4 | ||
|
5 | A repository is set to only accept a single head per name (typically named | |
|
6 | branch). However, obsolete changesets can make this enforcement more | |
|
7 | complicated, because they can be kept visible by other changeset on other | |
|
8 | branch. | |
|
9 | ||
|
10 | This case is part of a series of tests checking this behavior. | |
|
11 | ||
|
12 | Category A: Involving obsolescence | |
|
13 | TestCase 1: A fully obsolete branch kept visible by another one | |
|
14 | ||
|
15 | .. old-state: | |
|
16 | .. | |
|
17 | .. * 2 changesets on branch default | |
|
18 | .. * 2 changesets on branch Z on top of them | |
|
19 | .. | |
|
20 | .. new-state: | |
|
21 | .. | |
|
22 | .. * 2 changesets on branch Z at the same location | |
|
23 | .. * 2 changesets on branch default superseding the other ones | |
|
24 | .. | |
|
25 | .. expected-result: | |
|
26 | .. | |
|
27 | .. * only one head detected | |
|
28 | .. | |
|
29 | .. graph-summary: | |
|
30 | .. | |
|
31 | .. D ● (branch Z) | |
|
32 | .. | | |
|
33 | .. C ● (branch Z) | |
|
34 | .. | | |
|
35 | .. B ø⇠◔ B' | |
|
36 | .. | | | |
|
37 | .. A ø⇠◔ A' | |
|
38 | .. |/ | |
|
39 | .. ● | |
|
40 | ||
|
41 | $ . $TESTDIR/testlib/push-checkheads-util.sh | |
|
42 | ||
|
43 | $ cat >> $HGRCPATH << EOF | |
|
44 | > [command-templates] | |
|
45 | > log = "{node|short} [{branch}] ({phase}): {desc}\n" | |
|
46 | > EOF | |
|
47 | ||
|
48 | Test setup | |
|
49 | ---------- | |
|
50 | ||
|
51 | $ mkdir A1 | |
|
52 | $ cd A1 | |
|
53 | $ setuprepos single-head | |
|
54 | creating basic server and client repo | |
|
55 | updating to branch default | |
|
56 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
57 | $ cd client | |
|
58 | $ mkcommit B0 | |
|
59 | $ hg branch Z | |
|
60 | marked working directory as branch Z | |
|
61 | (branches are permanent and global, did you want a bookmark?) | |
|
62 | $ mkcommit C0 | |
|
63 | $ mkcommit D0 | |
|
64 | $ hg push --new-branch | |
|
65 | pushing to $TESTTMP/A1/server | |
|
66 | searching for changes | |
|
67 | adding changesets | |
|
68 | adding manifests | |
|
69 | adding file changes | |
|
70 | added 3 changesets with 3 changes to 3 files | |
|
71 | $ hg up 0 | |
|
72 | 0 files updated, 0 files merged, 4 files removed, 0 files unresolved | |
|
73 | $ mkcommit A1 | |
|
74 | created new head | |
|
75 | $ mkcommit B1 | |
|
76 | $ hg debugobsolete `getid "desc(A0)"` `getid "desc(A1)"` | |
|
77 | 1 new obsolescence markers | |
|
78 | obsoleted 1 changesets | |
|
79 | 3 new orphan changesets | |
|
80 | $ hg debugobsolete `getid "desc(B0)"` `getid "desc(B1)"` | |
|
81 | 1 new obsolescence markers | |
|
82 | obsoleted 1 changesets | |
|
83 | $ hg heads | |
|
84 | 262c8c798096 [default] (draft): B1 | |
|
85 | cdf1dbb37a67 [Z] (draft): D0 | |
|
86 | $ hg log -G --hidden | |
|
87 | @ 262c8c798096 [default] (draft): B1 | |
|
88 | | | |
|
89 | o f6082bc4ffef [default] (draft): A1 | |
|
90 | | | |
|
91 | | * cdf1dbb37a67 [Z] (draft): D0 | |
|
92 | | | | |
|
93 | | * 3213e3e16c67 [Z] (draft): C0 | |
|
94 | | | | |
|
95 | | x d73caddc5533 [default] (draft): B0 | |
|
96 | | | | |
|
97 | | x 8aaa48160adc [default] (draft): A0 | |
|
98 | |/ | |
|
99 | o 1e4be0697311 [default] (public): root | |
|
100 | ||
|
101 | ||
|
102 | Actual testing | |
|
103 | -------------- | |
|
104 | ||
|
105 | $ hg push -r 'desc("B1")' | |
|
106 | pushing to $TESTTMP/A1/server | |
|
107 | searching for changes | |
|
108 | adding changesets | |
|
109 | adding manifests | |
|
110 | adding file changes | |
|
111 | added 2 changesets with 2 changes to 2 files (+1 heads) | |
|
112 | 2 new obsolescence markers | |
|
113 | obsoleted 2 changesets | |
|
114 | 2 new orphan changesets |
@@ -0,0 +1,113 b'' | |||
|
1 | ========================================= | |
|
2 | Testing single head enforcement: Case A-2 | |
|
3 | ========================================= | |
|
4 | ||
|
5 | A repository is set to only accept a single head per name (typically named | |
|
6 | branch). However, obsolete changesets can make this enforcement more | |
|
7 | complicated, because they can be kept visible by other changeset on other | |
|
8 | branch. | |
|
9 | ||
|
10 | This case is part of a series of tests checking this behavior. | |
|
11 | ||
|
12 | Category A: Involving obsolescence | |
|
13 | TestCase 2: A branch is split in two, effectively creating two heads | |
|
14 | ||
|
15 | .. old-state: | |
|
16 | .. | |
|
17 | .. * 2 changesets on branch default | |
|
18 | .. * 2 changesets on branch Z on top of them | |
|
19 | .. | |
|
20 | .. new-state: | |
|
21 | .. | |
|
22 | .. * 2 changesets on branch Z at the same location | |
|
23 | .. * 1 changeset on branch default unchanged | |
|
24 | .. * 1 changeset on branch default superseding the other ones | |
|
25 | .. | |
|
26 | .. expected-result: | |
|
27 | .. | |
|
28 | .. * two heads detected | |
|
29 | .. | |
|
30 | .. graph-summary: | |
|
31 | .. | |
|
32 | .. D ● (branch Z) | |
|
33 | .. | | |
|
34 | .. C ● (branch Z) | |
|
35 | .. | | |
|
36 | .. B ø⇠◔ B' | |
|
37 | .. | | | |
|
38 | .. A ● | | |
|
39 | .. |/ | |
|
40 | .. ● | |
|
41 | ||
|
42 | $ . $TESTDIR/testlib/push-checkheads-util.sh | |
|
43 | ||
|
44 | $ cat >> $HGRCPATH << EOF | |
|
45 | > [command-templates] | |
|
46 | > log = "{node|short} [{branch}] ({phase}): {desc}\n" | |
|
47 | > EOF | |
|
48 | ||
|
49 | Test setup | |
|
50 | ---------- | |
|
51 | ||
|
52 | $ mkdir A2 | |
|
53 | $ cd A2 | |
|
54 | $ setuprepos single-head | |
|
55 | creating basic server and client repo | |
|
56 | updating to branch default | |
|
57 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
58 | $ cd client | |
|
59 | $ mkcommit B0 | |
|
60 | $ hg branch Z | |
|
61 | marked working directory as branch Z | |
|
62 | (branches are permanent and global, did you want a bookmark?) | |
|
63 | $ mkcommit C0 | |
|
64 | $ mkcommit D0 | |
|
65 | $ hg push --new-branch | |
|
66 | pushing to $TESTTMP/A2/server | |
|
67 | searching for changes | |
|
68 | adding changesets | |
|
69 | adding manifests | |
|
70 | adding file changes | |
|
71 | added 3 changesets with 3 changes to 3 files | |
|
72 | $ hg up 0 | |
|
73 | 0 files updated, 0 files merged, 4 files removed, 0 files unresolved | |
|
74 | $ mkcommit B1 | |
|
75 | created new head | |
|
76 | $ hg debugobsolete `getid "desc(B0)"` `getid "desc(B1)"` | |
|
77 | 1 new obsolescence markers | |
|
78 | obsoleted 1 changesets | |
|
79 | 2 new orphan changesets | |
|
80 | $ hg heads | |
|
81 | 25c56d33e4c4 [default] (draft): B1 | |
|
82 | cdf1dbb37a67 [Z] (draft): D0 | |
|
83 | 8aaa48160adc [default] (draft): A0 | |
|
84 | $ hg log -G --hidden | |
|
85 | @ 25c56d33e4c4 [default] (draft): B1 | |
|
86 | | | |
|
87 | | * cdf1dbb37a67 [Z] (draft): D0 | |
|
88 | | | | |
|
89 | | * 3213e3e16c67 [Z] (draft): C0 | |
|
90 | | | | |
|
91 | | x d73caddc5533 [default] (draft): B0 | |
|
92 | | | | |
|
93 | | o 8aaa48160adc [default] (draft): A0 | |
|
94 | |/ | |
|
95 | o 1e4be0697311 [default] (public): root | |
|
96 | ||
|
97 | ||
|
98 | Actual testing | |
|
99 | -------------- | |
|
100 | ||
|
101 | (force push to make sure we get the changeset on the remote) | |
|
102 | ||
|
103 | $ hg push -r 'desc("B1")' --force | |
|
104 | pushing to $TESTTMP/A2/server | |
|
105 | searching for changes | |
|
106 | adding changesets | |
|
107 | adding manifests | |
|
108 | adding file changes | |
|
109 | transaction abort! | |
|
110 | rollback completed | |
|
111 | abort: rejecting multiple heads on branch "default" | |
|
112 | (2 heads: 8aaa48160adc 25c56d33e4c4) | |
|
113 | [255] |
@@ -0,0 +1,120 b'' | |||
|
1 | ========================================= | |
|
2 | Testing single head enforcement: Case A-3 | |
|
3 | ========================================= | |
|
4 | ||
|
5 | A repository is set to only accept a single head per name (typically named | |
|
6 | branch). However, obsolete changesets can make this enforcement more | |
|
7 | complicated, because they can be kept visible by other changeset on other | |
|
8 | branch. | |
|
9 | ||
|
10 | This case is part of a series of tests checking this behavior. | |
|
11 | ||
|
12 | Category A: Involving obsolescence | |
|
13 | TestCase 3: Full superseding of a branch interleaved with another | |
|
14 | ||
|
15 | .. old-state: | |
|
16 | .. | |
|
17 | .. * 2 changesets on branch default | |
|
18 | .. * 2 changesets on branch Z interleaved with the other | |
|
19 | .. | |
|
20 | .. new-state: | |
|
21 | .. | |
|
22 | .. * 2 changesets on branch Z at the same location | |
|
23 | .. * 2 changesets on branch default superseding the other ones | |
|
24 | .. | |
|
25 | .. expected-result: | |
|
26 | .. | |
|
27 | .. * only one head detected | |
|
28 | .. | |
|
29 | .. graph-summary: | |
|
30 | .. | |
|
31 | .. D ● (branch Z) | |
|
32 | .. | | |
|
33 | .. C ø⇠◔ C' | |
|
34 | .. | | | |
|
35 | .. B ● | (branch Z) | |
|
36 | .. | | | |
|
37 | .. A ø⇠◔ A' | |
|
38 | .. |/ | |
|
39 | .. ● | |
|
40 | ||
|
41 | $ . $TESTDIR/testlib/push-checkheads-util.sh | |
|
42 | ||
|
43 | $ cat >> $HGRCPATH << EOF | |
|
44 | > [command-templates] | |
|
45 | > log = "{node|short} [{branch}] ({phase}): {desc}\n" | |
|
46 | > EOF | |
|
47 | ||
|
48 | Test setup | |
|
49 | ---------- | |
|
50 | ||
|
51 | $ mkdir A3 | |
|
52 | $ cd A3 | |
|
53 | $ setuprepos single-head | |
|
54 | creating basic server and client repo | |
|
55 | updating to branch default | |
|
56 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
57 | $ cd client | |
|
58 | $ hg branch Z | |
|
59 | marked working directory as branch Z | |
|
60 | (branches are permanent and global, did you want a bookmark?) | |
|
61 | $ mkcommit B0 | |
|
62 | $ hg branch default --force | |
|
63 | marked working directory as branch default | |
|
64 | $ mkcommit C0 | |
|
65 | created new head | |
|
66 | $ hg branch Z --force | |
|
67 | marked working directory as branch Z | |
|
68 | $ mkcommit D0 | |
|
69 | created new head | |
|
70 | $ hg push --new-branch | |
|
71 | pushing to $TESTTMP/A3/server | |
|
72 | searching for changes | |
|
73 | adding changesets | |
|
74 | adding manifests | |
|
75 | adding file changes | |
|
76 | added 3 changesets with 3 changes to 3 files | |
|
77 | $ hg up 0 | |
|
78 | 0 files updated, 0 files merged, 4 files removed, 0 files unresolved | |
|
79 | $ mkcommit A1 | |
|
80 | created new head | |
|
81 | $ mkcommit C1 | |
|
82 | $ hg debugobsolete `getid "desc(A0)"` `getid "desc(A1)"` | |
|
83 | 1 new obsolescence markers | |
|
84 | obsoleted 1 changesets | |
|
85 | 3 new orphan changesets | |
|
86 | $ hg debugobsolete `getid "desc(C0)"` `getid "desc(C1)"` | |
|
87 | 1 new obsolescence markers | |
|
88 | obsoleted 1 changesets | |
|
89 | $ hg heads | |
|
90 | 0c76bc104656 [default] (draft): C1 | |
|
91 | 78578c4306ce [Z] (draft): D0 | |
|
92 | $ hg log -G --hidden | |
|
93 | @ 0c76bc104656 [default] (draft): C1 | |
|
94 | | | |
|
95 | o f6082bc4ffef [default] (draft): A1 | |
|
96 | | | |
|
97 | | * 78578c4306ce [Z] (draft): D0 | |
|
98 | | | | |
|
99 | | x afc55ba2ce61 [default] (draft): C0 | |
|
100 | | | | |
|
101 | | * 93e5c1321ece [Z] (draft): B0 | |
|
102 | | | | |
|
103 | | x 8aaa48160adc [default] (draft): A0 | |
|
104 | |/ | |
|
105 | o 1e4be0697311 [default] (public): root | |
|
106 | ||
|
107 | ||
|
108 | Actual testing | |
|
109 | -------------- | |
|
110 | ||
|
111 | $ hg push -r 'desc("C1")' | |
|
112 | pushing to $TESTTMP/A3/server | |
|
113 | searching for changes | |
|
114 | adding changesets | |
|
115 | adding manifests | |
|
116 | adding file changes | |
|
117 | added 2 changesets with 2 changes to 2 files (+1 heads) | |
|
118 | 2 new obsolescence markers | |
|
119 | obsoleted 2 changesets | |
|
120 | 2 new orphan changesets |
@@ -0,0 +1,117 b'' | |||
|
1 | ========================================= | |
|
2 | Testing single head enforcement: Case A-4 | |
|
3 | ========================================= | |
|
4 | ||
|
5 | A repository is set to only accept a single head per name (typically named | |
|
6 | branch). However, obsolete changesets can make this enforcement more | |
|
7 | complicated, because they can be kept visible by other changeset on other | |
|
8 | branch. | |
|
9 | ||
|
10 | This case is part of a series of tests checking this behavior. | |
|
11 | ||
|
12 | Category A: Involving obsolescence | |
|
13 | TestCase 4: Partial rewrite of a branch to deinterleave it | |
|
14 | ||
|
15 | .. old-state: | |
|
16 | .. | |
|
17 | .. * 2 changesets on branch default | |
|
18 | .. * 2 changesets on branch Z interleaved with the other one | |
|
19 | .. | |
|
20 | .. new-state: | |
|
21 | .. | |
|
22 | .. * 2 changesets on branch Z at the same location | |
|
23 | .. * 1 changeset on default untouched (the lower one) | |
|
24 | .. * 1 changeset on default moved on the other one | |
|
25 | .. | |
|
26 | .. expected-result: | |
|
27 | .. | |
|
28 | .. * only one head detected | |
|
29 | .. | |
|
30 | .. graph-summary: | |
|
31 | .. | |
|
32 | .. D ● (branch Z) | |
|
33 | .. | | |
|
34 | .. C ø⇠◔ C' | |
|
35 | .. | | | |
|
36 | .. B ● | (branch Z) | |
|
37 | .. |/ | |
|
38 | .. A ● | |
|
39 | .. | | |
|
40 | .. ● | |
|
41 | ||
|
42 | $ . $TESTDIR/testlib/push-checkheads-util.sh | |
|
43 | ||
|
44 | $ cat >> $HGRCPATH << EOF | |
|
45 | > [command-templates] | |
|
46 | > log = "{node|short} [{branch}] ({phase}): {desc}\n" | |
|
47 | > EOF | |
|
48 | ||
|
49 | Test setup | |
|
50 | ---------- | |
|
51 | ||
|
52 | $ mkdir A4 | |
|
53 | $ cd A4 | |
|
54 | $ setuprepos single-head | |
|
55 | creating basic server and client repo | |
|
56 | updating to branch default | |
|
57 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
58 | $ cd client | |
|
59 | $ hg branch Z | |
|
60 | marked working directory as branch Z | |
|
61 | (branches are permanent and global, did you want a bookmark?) | |
|
62 | $ mkcommit B0 | |
|
63 | $ hg branch default --force | |
|
64 | marked working directory as branch default | |
|
65 | $ mkcommit C0 | |
|
66 | created new head | |
|
67 | $ hg branch Z --force | |
|
68 | marked working directory as branch Z | |
|
69 | $ mkcommit D0 | |
|
70 | created new head | |
|
71 | $ hg push --new-branch | |
|
72 | pushing to $TESTTMP/A4/server | |
|
73 | searching for changes | |
|
74 | adding changesets | |
|
75 | adding manifests | |
|
76 | adding file changes | |
|
77 | added 3 changesets with 3 changes to 3 files | |
|
78 | $ hg up 'desc("A0")' | |
|
79 | 0 files updated, 0 files merged, 3 files removed, 0 files unresolved | |
|
80 | $ mkcommit C1 | |
|
81 | created new head | |
|
82 | $ hg debugobsolete `getid "desc(C0)"` `getid "desc(C1)"` | |
|
83 | 1 new obsolescence markers | |
|
84 | obsoleted 1 changesets | |
|
85 | 1 new orphan changesets | |
|
86 | $ hg heads | |
|
87 | cfe9ed94fa4a [default] (draft): C1 | |
|
88 | 78578c4306ce [Z] (draft): D0 | |
|
89 | $ hg log -G --hidden | |
|
90 | @ cfe9ed94fa4a [default] (draft): C1 | |
|
91 | | | |
|
92 | | * 78578c4306ce [Z] (draft): D0 | |
|
93 | | | | |
|
94 | | x afc55ba2ce61 [default] (draft): C0 | |
|
95 | | | | |
|
96 | | o 93e5c1321ece [Z] (draft): B0 | |
|
97 | |/ | |
|
98 | o 8aaa48160adc [default] (draft): A0 | |
|
99 | | | |
|
100 | o 1e4be0697311 [default] (public): root | |
|
101 | ||
|
102 | ||
|
103 | Actual testing | |
|
104 | -------------- | |
|
105 | ||
|
106 | (force push to make sure we get the changeset on the remote) | |
|
107 | ||
|
108 | $ hg push -r 'desc("C1")' --force | |
|
109 | pushing to $TESTTMP/A4/server | |
|
110 | searching for changes | |
|
111 | adding changesets | |
|
112 | adding manifests | |
|
113 | adding file changes | |
|
114 | added 1 changesets with 1 changes to 1 files (+1 heads) | |
|
115 | 1 new obsolescence markers | |
|
116 | obsoleted 1 changesets | |
|
117 | 1 new orphan changesets |
@@ -0,0 +1,108 b'' | |||
|
1 | ========================================= | |
|
2 | Testing single head enforcement: Case A-5 | |
|
3 | ========================================= | |
|
4 | ||
|
5 | A repository is set to only accept a single head per name (typically named | |
|
6 | branch). However, obsolete changesets can make this enforcement more | |
|
7 | complicated, because they can be kept visible by other changeset on other | |
|
8 | branch. | |
|
9 | ||
|
10 | This case is part of a series of tests checking this behavior. | |
|
11 | ||
|
12 | Category A: Involving obsolescence | |
|
13 | TestCase 5: Obsoleting a merge reveals two heads | |
|
14 | ||
|
15 | .. old-state: | |
|
16 | .. | |
|
17 | .. * 3 changesets on branch default (2 on their own branch + 1 merge) | |
|
18 | .. * 1 changeset on branch Z (children of the merge) | |
|
19 | .. | |
|
20 | .. new-state: | |
|
21 | .. | |
|
22 | .. * 2 changesets on branch default (merge is obsolete) each a head | |
|
23 | .. * 1 changeset on branch Z keeping the merge visible | |
|
24 | .. | |
|
25 | .. expected-result: | |
|
26 | .. | |
|
27 | .. * 2 heads detected (because we skip the merge) | |
|
28 | .. | |
|
29 | .. graph-summary: | |
|
30 | .. | |
|
31 | .. C ● (branch Z) | |
|
32 | .. | | |
|
33 | .. M ⊗ | |
|
34 | .. |\ | |
|
35 | .. A ● ● B | |
|
36 | .. |/ | |
|
37 | .. ● | |
|
38 | ||
|
39 | $ . $TESTDIR/testlib/push-checkheads-util.sh | |
|
40 | ||
|
41 | $ cat >> $HGRCPATH << EOF | |
|
42 | > [command-templates] | |
|
43 | > log = "{node|short} [{branch}] ({phase}): {desc}\n" | |
|
44 | > EOF | |
|
45 | ||
|
46 | Test setup | |
|
47 | ---------- | |
|
48 | ||
|
49 | $ mkdir A5 | |
|
50 | $ cd A5 | |
|
51 | $ setuprepos single-head | |
|
52 | creating basic server and client repo | |
|
53 | updating to branch default | |
|
54 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
55 | $ cd client | |
|
56 | $ hg up 0 | |
|
57 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
|
58 | $ mkcommit B0 | |
|
59 | created new head | |
|
60 | $ hg merge | |
|
61 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
62 | (branch merge, don't forget to commit) | |
|
63 | $ hg ci -m 'M0' | |
|
64 | $ hg branch Z | |
|
65 | marked working directory as branch Z | |
|
66 | (branches are permanent and global, did you want a bookmark?) | |
|
67 | $ mkcommit C0 | |
|
68 | $ hg push --new-branch | |
|
69 | pushing to $TESTTMP/A5/server | |
|
70 | searching for changes | |
|
71 | adding changesets | |
|
72 | adding manifests | |
|
73 | adding file changes | |
|
74 | added 3 changesets with 2 changes to 2 files | |
|
75 | $ hg debugobsolete `getid "desc(M0)"` --record-parents | |
|
76 | 1 new obsolescence markers | |
|
77 | obsoleted 1 changesets | |
|
78 | 1 new orphan changesets | |
|
79 | $ hg heads | |
|
80 | 61c95483cc12 [Z] (draft): C0 | |
|
81 | 74ff5441d343 [default] (draft): B0 | |
|
82 | 8aaa48160adc [default] (draft): A0 | |
|
83 | $ hg log -G --hidden | |
|
84 | @ 61c95483cc12 [Z] (draft): C0 | |
|
85 | | | |
|
86 | x 14d3d4d41d1a [default] (draft): M0 | |
|
87 | |\ | |
|
88 | | o 74ff5441d343 [default] (draft): B0 | |
|
89 | | | | |
|
90 | o | 8aaa48160adc [default] (draft): A0 | |
|
91 | |/ | |
|
92 | o 1e4be0697311 [default] (public): root | |
|
93 | ||
|
94 | ||
|
95 | Actual testing | |
|
96 | -------------- | |
|
97 | ||
|
98 | (force push to make sure we get the changeset on the remote) | |
|
99 | ||
|
100 | $ hg push -r 'desc("C0")' --force | |
|
101 | pushing to $TESTTMP/A5/server | |
|
102 | searching for changes | |
|
103 | no changes found | |
|
104 | transaction abort! | |
|
105 | rollback completed | |
|
106 | abort: rejecting multiple heads on branch "default" | |
|
107 | (2 heads: 8aaa48160adc 74ff5441d343) | |
|
108 | [255] |
@@ -19,6 +19,7 b' from . import (' | |||
|
19 | 19 | bookmarks, |
|
20 | 20 | branchmap, |
|
21 | 21 | error, |
|
22 | obsolete, | |
|
22 | 23 | phases, |
|
23 | 24 | pycompat, |
|
24 | 25 | scmutil, |
@@ -545,12 +546,16 b' def _postprocessobsolete(pushop, futurec' | |||
|
545 | 546 | if len(localcandidate) == 1: |
|
546 | 547 | return unknownheads | set(candidate_newhs), set() |
|
547 | 548 | |
|
549 | obsrevs = obsolete.getrevs(unfi, b'obsolete') | |
|
550 | futurenonobsolete = frozenset(futurecommon) - obsrevs | |
|
551 | ||
|
548 | 552 | # actually process branch replacement |
|
549 | 553 | while localcandidate: |
|
550 | 554 | nh = localcandidate.pop() |
|
555 | r = torev(nh) | |
|
551 | 556 | current_branch = unfi[nh].branch() |
|
552 | 557 | # run this check early to skip the evaluation of the whole branch |
|
553 | if torev(nh) in futurecommon or ispublic(torev(nh)): | |
|
558 | if ispublic(r) or r not in obsrevs: | |
|
554 | 559 | newhs.add(nh) |
|
555 | 560 | continue |
|
556 | 561 | |
@@ -572,7 +577,7 b' def _postprocessobsolete(pushop, futurec' | |||
|
572 | 577 | # * if we have no markers to push to obsolete it. |
|
573 | 578 | if ( |
|
574 | 579 | any(ispublic(r) for r in branchrevs) |
|
575 |
or any(torev(n) in future |
|
|
580 | or any(torev(n) in futurenonobsolete for n in branchnodes) | |
|
576 | 581 | or any(not hasoutmarker(n) for n in branchnodes) |
|
577 | 582 | ): |
|
578 | 583 | newhs.add(nh) |
@@ -41,4 +41,10 b' setuprepos() {' | |||
|
41 | 41 | mkcommit A0 |
|
42 | 42 | cd .. |
|
43 | 43 | hg clone server client |
|
44 | ||
|
45 | if [ "$1" = "single-head" ]; then | |
|
46 | echo >> "server/.hg/hgrc" "[experimental]" | |
|
47 | echo >> "server/.hg/hgrc" "# enforce a single name per branch" | |
|
48 | echo >> "server/.hg/hgrc" "single-head-per-branch = yes" | |
|
49 | fi | |
|
44 | 50 | } |
General Comments 0
You need to be logged in to leave comments.
Login now