Show More
@@ -1,207 +1,490 b'' | |||||
1 | ============================= |
|
1 | ============================= | |
2 | Test distributed obsolescence |
|
2 | Test distributed obsolescence | |
3 | ============================= |
|
3 | ============================= | |
4 |
|
4 | |||
5 | This file test various cases where data (changeset, phase, obsmarkers) is |
|
5 | This file test various cases where data (changeset, phase, obsmarkers) is | |
6 | added to the repository in a specific order. Usually, this order is unlikely |
|
6 | added to the repository in a specific order. Usually, this order is unlikely | |
7 | to happen in the local case but can easily happen in the distributed case. |
|
7 | to happen in the local case but can easily happen in the distributed case. | |
8 |
|
8 | |||
9 | $ unset HGUSER |
|
9 | $ unset HGUSER | |
10 | $ unset EMAIL |
|
10 | $ unset EMAIL | |
11 | $ . $TESTDIR/testlib/obsmarker-common.sh |
|
11 | $ . $TESTDIR/testlib/obsmarker-common.sh | |
12 | $ cat >> $HGRCPATH << EOF |
|
12 | $ cat >> $HGRCPATH << EOF | |
|
13 | > [extensions] | |||
|
14 | > rebase = | |||
13 | > [experimental] |
|
15 | > [experimental] | |
14 | > evolution = all |
|
16 | > evolution = all | |
15 | > [phases] |
|
17 | > [phases] | |
16 | > publish = False |
|
18 | > publish = False | |
17 | > [templates] |
|
19 | > [templates] | |
18 | > obsfatesuccessors = "{if(successors, " as ")}{join(successors, ", ")}" |
|
20 | > obsfatesuccessors = "{if(successors, " as ")}{join(successors, ", ")}" | |
19 | > obsfateverb = "{obsfateverb(successors)}" |
|
21 | > obsfateverb = "{obsfateverb(successors)}" | |
20 | > obsfateoperations = "{if(obsfateoperations(markers), " using {join(obsfateoperations(markers), ", ")}")}" |
|
22 | > obsfateoperations = "{if(obsfateoperations(markers), " using {join(obsfateoperations(markers), ", ")}")}" | |
21 | > obsfateusers = "{if(obsfateusers(markers), " by {join(obsfateusers(markers), ", ")}")}" |
|
23 | > obsfateusers = "{if(obsfateusers(markers), " by {join(obsfateusers(markers), ", ")}")}" | |
22 | > obsfatedate = "{if(obsfatedate(markers), "{ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), " (at {min(obsfatedate(markers))|isodate})", " (between {min(obsfatedate(markers))|isodate} and {max(obsfatedate(markers))|isodate})")}")}" |
|
24 | > obsfatedate = "{if(obsfatedate(markers), "{ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), " (at {min(obsfatedate(markers))|isodate})", " (between {min(obsfatedate(markers))|isodate} and {max(obsfatedate(markers))|isodate})")}")}" | |
23 | > obsfate = "{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}; " |
|
25 | > obsfate = "{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}; " | |
24 | > [ui] |
|
26 | > [ui] | |
25 | > logtemplate= {rev}:{node|short} {desc} {if(succsandmarkers, "[{succsandmarkers % "{obsfate}"}]")}\n |
|
27 | > logtemplate= {rev}:{node|short} {desc} {if(succsandmarkers, "[{succsandmarkers % "{obsfate}"}]")}\n | |
26 | > EOF |
|
28 | > EOF | |
27 |
|
29 | |||
28 | Check distributed chain building |
|
30 | Check distributed chain building | |
29 | ================================ |
|
31 | ================================ | |
30 |
|
32 | |||
31 | Test case where a changeset is marked as a successor of another local |
|
33 | Test case where a changeset is marked as a successor of another local | |
32 | changeset while the successor has already been obsoleted remotely. |
|
34 | changeset while the successor has already been obsoleted remotely. | |
33 |
|
35 | |||
34 | The chain of evolution should seamlessly connect and all but the new version |
|
36 | The chain of evolution should seamlessly connect and all but the new version | |
35 | (created remotely) should be seen as obsolete. |
|
37 | (created remotely) should be seen as obsolete. | |
36 |
|
38 | |||
37 | Initial setup |
|
39 | Initial setup | |
38 |
|
40 | |||
39 | $ mkdir distributed-chain-building |
|
41 | $ mkdir distributed-chain-building | |
40 | $ cd distributed-chain-building |
|
42 | $ cd distributed-chain-building | |
41 | $ hg init server |
|
43 | $ hg init server | |
42 | $ cd server |
|
44 | $ cd server | |
43 | $ cat << EOF >> .hg/hgrc |
|
45 | $ cat << EOF >> .hg/hgrc | |
44 | > [ui] |
|
46 | > [ui] | |
45 | > username = server |
|
47 | > username = server | |
46 | > EOF |
|
48 | > EOF | |
47 | $ mkcommit ROOT |
|
49 | $ mkcommit ROOT | |
48 | $ mkcommit c_A0 |
|
50 | $ mkcommit c_A0 | |
49 | $ hg up 'desc("ROOT")' |
|
51 | $ hg up 'desc("ROOT")' | |
50 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
52 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
51 | $ mkcommit c_A1 |
|
53 | $ mkcommit c_A1 | |
52 | created new head |
|
54 | created new head | |
53 | $ hg up 'desc("ROOT")' |
|
55 | $ hg up 'desc("ROOT")' | |
54 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
56 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
55 | $ mkcommit c_B0 |
|
57 | $ mkcommit c_B0 | |
56 | created new head |
|
58 | created new head | |
57 | $ hg debugobsolete `getid 'desc("c_A0")'` `getid 'desc("c_A1")'` |
|
59 | $ hg debugobsolete `getid 'desc("c_A0")'` `getid 'desc("c_A1")'` | |
58 | obsoleted 1 changesets |
|
60 | obsoleted 1 changesets | |
59 | $ hg log -G --hidden |
|
61 | $ hg log -G --hidden | |
60 | @ 3:e5d7dda7cd28 c_B0 |
|
62 | @ 3:e5d7dda7cd28 c_B0 | |
61 | | |
|
63 | | | |
62 | | o 2:7f6b0a6f5c25 c_A1 |
|
64 | | o 2:7f6b0a6f5c25 c_A1 | |
63 | |/ |
|
65 | |/ | |
64 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] |
|
66 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | |
65 | |/ |
|
67 | |/ | |
66 | o 0:e82fb8d02bbf ROOT |
|
68 | o 0:e82fb8d02bbf ROOT | |
67 |
|
69 | |||
68 | $ hg debugobsolete |
|
70 | $ hg debugobsolete | |
69 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} |
|
71 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | |
70 | $ cd .. |
|
72 | $ cd .. | |
71 |
|
73 | |||
72 | duplicate the repo for the client: |
|
74 | duplicate the repo for the client: | |
73 |
|
75 | |||
74 | $ cp -R server client |
|
76 | $ cp -R server client | |
75 | $ cat << EOF >> client/.hg/hgrc |
|
77 | $ cat << EOF >> client/.hg/hgrc | |
76 | > [paths] |
|
78 | > [paths] | |
77 | > default = ../server/ |
|
79 | > default = ../server/ | |
78 | > [ui] |
|
80 | > [ui] | |
79 | > username = client |
|
81 | > username = client | |
80 | > EOF |
|
82 | > EOF | |
81 |
|
83 | |||
82 | server side: create new revision on the server (obsoleting another one) |
|
84 | server side: create new revision on the server (obsoleting another one) | |
83 |
|
85 | |||
84 | $ cd server |
|
86 | $ cd server | |
85 | $ hg up 'desc("ROOT")' |
|
87 | $ hg up 'desc("ROOT")' | |
86 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
88 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
87 | $ mkcommit c_B1 |
|
89 | $ mkcommit c_B1 | |
88 | created new head |
|
90 | created new head | |
89 | $ hg debugobsolete `getid 'desc("c_B0")'` `getid 'desc("c_B1")'` |
|
91 | $ hg debugobsolete `getid 'desc("c_B0")'` `getid 'desc("c_B1")'` | |
90 | obsoleted 1 changesets |
|
92 | obsoleted 1 changesets | |
91 | $ hg log -G |
|
93 | $ hg log -G | |
92 | @ 4:391a2bf12b1b c_B1 |
|
94 | @ 4:391a2bf12b1b c_B1 | |
93 | | |
|
95 | | | |
94 | | o 2:7f6b0a6f5c25 c_A1 |
|
96 | | o 2:7f6b0a6f5c25 c_A1 | |
95 | |/ |
|
97 | |/ | |
96 | o 0:e82fb8d02bbf ROOT |
|
98 | o 0:e82fb8d02bbf ROOT | |
97 |
|
99 | |||
98 | $ hg log -G --hidden |
|
100 | $ hg log -G --hidden | |
99 | @ 4:391a2bf12b1b c_B1 |
|
101 | @ 4:391a2bf12b1b c_B1 | |
100 | | |
|
102 | | | |
101 | | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000); ] |
|
103 | | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000); ] | |
102 | |/ |
|
104 | |/ | |
103 | | o 2:7f6b0a6f5c25 c_A1 |
|
105 | | o 2:7f6b0a6f5c25 c_A1 | |
104 | |/ |
|
106 | |/ | |
105 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] |
|
107 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | |
106 | |/ |
|
108 | |/ | |
107 | o 0:e82fb8d02bbf ROOT |
|
109 | o 0:e82fb8d02bbf ROOT | |
108 |
|
110 | |||
109 | $ hg debugobsolete |
|
111 | $ hg debugobsolete | |
110 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} |
|
112 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | |
111 | e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} |
|
113 | e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | |
112 | $ cd .. |
|
114 | $ cd .. | |
113 |
|
115 | |||
114 | client side: create a marker between two common changesets |
|
116 | client side: create a marker between two common changesets | |
115 | (client is not aware of the server activity yet) |
|
117 | (client is not aware of the server activity yet) | |
116 |
|
118 | |||
117 | $ cd client |
|
119 | $ cd client | |
118 | $ hg debugobsolete `getid 'desc("c_A1")'` `getid 'desc("c_B0")'` |
|
120 | $ hg debugobsolete `getid 'desc("c_A1")'` `getid 'desc("c_B0")'` | |
119 | obsoleted 1 changesets |
|
121 | obsoleted 1 changesets | |
120 | $ hg log -G |
|
122 | $ hg log -G | |
121 | @ 3:e5d7dda7cd28 c_B0 |
|
123 | @ 3:e5d7dda7cd28 c_B0 | |
122 | | |
|
124 | | | |
123 | o 0:e82fb8d02bbf ROOT |
|
125 | o 0:e82fb8d02bbf ROOT | |
124 |
|
126 | |||
125 | $ hg log -G --hidden |
|
127 | $ hg log -G --hidden | |
126 | @ 3:e5d7dda7cd28 c_B0 |
|
128 | @ 3:e5d7dda7cd28 c_B0 | |
127 | | |
|
129 | | | |
128 | | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000); ] |
|
130 | | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000); ] | |
129 | |/ |
|
131 | |/ | |
130 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] |
|
132 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | |
131 | |/ |
|
133 | |/ | |
132 | o 0:e82fb8d02bbf ROOT |
|
134 | o 0:e82fb8d02bbf ROOT | |
133 |
|
135 | |||
134 | $ hg debugobsolete |
|
136 | $ hg debugobsolete | |
135 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} |
|
137 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | |
136 | 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} |
|
138 | 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} | |
137 |
|
139 | |||
138 | client side: pull from the server |
|
140 | client side: pull from the server | |
139 | (the new successors should take over) |
|
141 | (the new successors should take over) | |
140 |
|
142 | |||
141 | $ hg up 'desc("ROOT")' |
|
143 | $ hg up 'desc("ROOT")' | |
142 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
144 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
143 | $ hg pull |
|
145 | $ hg pull | |
144 | pulling from $TESTTMP/distributed-chain-building/server (glob) |
|
146 | pulling from $TESTTMP/distributed-chain-building/server (glob) | |
145 | searching for changes |
|
147 | searching for changes | |
146 | adding changesets |
|
148 | adding changesets | |
147 | adding manifests |
|
149 | adding manifests | |
148 | adding file changes |
|
150 | adding file changes | |
149 | added 1 changesets with 1 changes to 1 files (+1 heads) |
|
151 | added 1 changesets with 1 changes to 1 files (+1 heads) | |
150 | 1 new obsolescence markers |
|
152 | 1 new obsolescence markers | |
151 | obsoleted 1 changesets |
|
153 | obsoleted 1 changesets | |
152 | (run 'hg heads' to see heads) |
|
154 | (run 'hg heads' to see heads) | |
153 | $ hg log -G |
|
155 | $ hg log -G | |
154 | o 4:391a2bf12b1b c_B1 |
|
156 | o 4:391a2bf12b1b c_B1 | |
155 | | |
|
157 | | | |
156 | @ 0:e82fb8d02bbf ROOT |
|
158 | @ 0:e82fb8d02bbf ROOT | |
157 |
|
159 | |||
158 | $ hg log -G --hidden |
|
160 | $ hg log -G --hidden | |
159 | o 4:391a2bf12b1b c_B1 |
|
161 | o 4:391a2bf12b1b c_B1 | |
160 | | |
|
162 | | | |
161 | | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000); ] |
|
163 | | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000); ] | |
162 | |/ |
|
164 | |/ | |
163 | | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000); ] |
|
165 | | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000); ] | |
164 | |/ |
|
166 | |/ | |
165 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] |
|
167 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | |
166 | |/ |
|
168 | |/ | |
167 | @ 0:e82fb8d02bbf ROOT |
|
169 | @ 0:e82fb8d02bbf ROOT | |
168 |
|
170 | |||
169 | $ hg debugobsolete |
|
171 | $ hg debugobsolete | |
170 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} |
|
172 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | |
171 | 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} |
|
173 | 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} | |
172 | e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} |
|
174 | e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | |
173 |
|
175 | |||
174 | server side: receive client push |
|
176 | server side: receive client push | |
175 | (the other way around, pushing to the server, the obsolete changesets stay |
|
177 | (the other way around, pushing to the server, the obsolete changesets stay | |
176 | obsolete on the server side but the marker is sent out.) |
|
178 | obsolete on the server side but the marker is sent out.) | |
177 |
|
179 | |||
178 | $ hg rollback |
|
180 | $ hg rollback | |
179 | repository tip rolled back to revision 3 (undo pull) |
|
181 | repository tip rolled back to revision 3 (undo pull) | |
180 | $ hg push -f |
|
182 | $ hg push -f | |
181 | pushing to $TESTTMP/distributed-chain-building/server (glob) |
|
183 | pushing to $TESTTMP/distributed-chain-building/server (glob) | |
182 | searching for changes |
|
184 | searching for changes | |
183 | adding changesets |
|
185 | adding changesets | |
184 | adding manifests |
|
186 | adding manifests | |
185 | adding file changes |
|
187 | adding file changes | |
186 | added 0 changesets with 0 changes to 1 files |
|
188 | added 0 changesets with 0 changes to 1 files | |
187 | 1 new obsolescence markers |
|
189 | 1 new obsolescence markers | |
188 | obsoleted 1 changesets |
|
190 | obsoleted 1 changesets | |
189 | $ hg -R ../server/ log -G |
|
191 | $ hg -R ../server/ log -G | |
190 | @ 4:391a2bf12b1b c_B1 |
|
192 | @ 4:391a2bf12b1b c_B1 | |
191 | | |
|
193 | | | |
192 | o 0:e82fb8d02bbf ROOT |
|
194 | o 0:e82fb8d02bbf ROOT | |
193 |
|
195 | |||
194 | $ hg -R ../server/ log -G --hidden |
|
196 | $ hg -R ../server/ log -G --hidden | |
195 | @ 4:391a2bf12b1b c_B1 |
|
197 | @ 4:391a2bf12b1b c_B1 | |
196 | | |
|
198 | | | |
197 | | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000); ] |
|
199 | | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000); ] | |
198 | |/ |
|
200 | |/ | |
199 | | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000); ] |
|
201 | | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000); ] | |
200 | |/ |
|
202 | |/ | |
201 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] |
|
203 | | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | |
202 | |/ |
|
204 | |/ | |
203 | o 0:e82fb8d02bbf ROOT |
|
205 | o 0:e82fb8d02bbf ROOT | |
204 |
|
206 | |||
205 | $ hg debugobsolete |
|
207 | $ hg debugobsolete | |
206 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} |
|
208 | e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | |
207 | 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} |
|
209 | 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} | |
|
210 | $ cd .. | |||
|
211 | ||||
|
212 | Check getting changesets after getting the markers | |||
|
213 | ================================================= | |||
|
214 | ||||
|
215 | This test case covers the scenario where commits are received -after- we | |||
|
216 | received some obsolescence markers turning them obsolete. | |||
|
217 | ||||
|
218 | For example, we pull some successors from a repository (with associated | |||
|
219 | predecessors marker chain) and then later we pull some intermediate | |||
|
220 | precedessors changeset from another repository. Obsolescence markers must | |||
|
221 | apply to the intermediate changeset. They have to be obsolete (and hidden). | |||
|
222 | ||||
|
223 | Avoiding pulling the changeset in the first place is a tricky decision because | |||
|
224 | there could be non-obsolete ancestors that need to be pulled, but the | |||
|
225 | discovery cannot currently find these (this is not the case in this tests). In | |||
|
226 | addition, we could also have to pull the changeset because they have children. | |||
|
227 | In this case, they would not be hidden (yet) because of the orphan descendant, | |||
|
228 | but they would still have to be obsolete. (This is not tested in this case | |||
|
229 | either). | |||
|
230 | ||||
|
231 | $ mkdir distributed-chain-building | |||
|
232 | $ cd distributed-chain-building | |||
|
233 | $ hg init server | |||
|
234 | $ cd server | |||
|
235 | $ cat << EOF >> .hg/hgrc | |||
|
236 | > [ui] | |||
|
237 | > username = server | |||
|
238 | > EOF | |||
|
239 | $ mkcommit ROOT | |||
|
240 | $ cd .. | |||
|
241 | $ hg clone server repo-Alice | |||
|
242 | updating to branch default | |||
|
243 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
244 | $ cat << EOF >> repo-Alice/.hg/hgrc | |||
|
245 | > [ui] | |||
|
246 | > username = alice | |||
|
247 | > EOF | |||
|
248 | $ hg clone server repo-Bob | |||
|
249 | updating to branch default | |||
|
250 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
251 | $ cat << EOF >> repo-Bob/.hg/hgrc | |||
|
252 | > [ui] | |||
|
253 | > username = bob | |||
|
254 | > EOF | |||
|
255 | $ hg clone server repo-Celeste | |||
|
256 | updating to branch default | |||
|
257 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
258 | $ cat << EOF >> repo-Celeste/.hg/hgrc | |||
|
259 | > [ui] | |||
|
260 | > username = celeste | |||
|
261 | > EOF | |||
|
262 | ||||
|
263 | Create some changesets locally | |||
|
264 | ||||
|
265 | $ cd repo-Alice | |||
|
266 | $ mkcommit c_A0 | |||
|
267 | $ mkcommit c_B0 | |||
|
268 | $ cd .. | |||
|
269 | ||||
|
270 | Bob pulls from Alice and rewrites them | |||
|
271 | ||||
|
272 | $ cd repo-Bob | |||
|
273 | $ hg pull ../repo-Alice | |||
|
274 | pulling from ../repo-Alice | |||
|
275 | searching for changes | |||
|
276 | adding changesets | |||
|
277 | adding manifests | |||
|
278 | adding file changes | |||
|
279 | added 2 changesets with 2 changes to 2 files | |||
|
280 | (run 'hg update' to get a working copy) | |||
|
281 | $ hg up 'desc("c_A")' | |||
|
282 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
283 | $ hg commit --amend -m 'c_A1' | |||
|
284 | $ hg rebase -r 'desc("c_B0")' -d . # no easy way to rewrite the message with the rebase | |||
|
285 | rebasing 2:ef908e42ce65 "c_B0" | |||
|
286 | $ hg up | |||
|
287 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
288 | $ hg commit --amend -m 'c_B1' | |||
|
289 | $ hg log -G | |||
|
290 | @ 5:956063ac4557 c_B1 | |||
|
291 | | | |||
|
292 | o 3:5b5708a437f2 c_A1 | |||
|
293 | | | |||
|
294 | o 0:e82fb8d02bbf ROOT | |||
|
295 | ||||
|
296 | $ hg log -G --hidden | |||
|
297 | @ 5:956063ac4557 c_B1 | |||
|
298 | | | |||
|
299 | | x 4:5ffb9e311b35 c_B0 [rewritten using amend as 5:956063ac4557 by bob (at 1970-01-01 00:00 +0000); ] | |||
|
300 | |/ | |||
|
301 | o 3:5b5708a437f2 c_A1 | |||
|
302 | | | |||
|
303 | | x 2:ef908e42ce65 c_B0 [rewritten using rebase as 4:5ffb9e311b35 by bob (at 1970-01-01 00:00 +0000); ] | |||
|
304 | | | | |||
|
305 | | x 1:d33b0a3a6464 c_A0 [rewritten using amend as 3:5b5708a437f2 by bob (at 1970-01-01 00:00 +0000); ] | |||
|
306 | |/ | |||
|
307 | o 0:e82fb8d02bbf ROOT | |||
|
308 | ||||
|
309 | $ hg debugobsolete | |||
|
310 | d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
311 | ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |||
|
312 | 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
313 | $ cd .. | |||
|
314 | ||||
|
315 | Celeste pulls from Bob and rewrites them again | |||
|
316 | ||||
|
317 | $ cd repo-Celeste | |||
|
318 | $ hg pull ../repo-Bob | |||
|
319 | pulling from ../repo-Bob | |||
|
320 | searching for changes | |||
|
321 | adding changesets | |||
|
322 | adding manifests | |||
|
323 | adding file changes | |||
|
324 | added 2 changesets with 2 changes to 2 files | |||
|
325 | 3 new obsolescence markers | |||
|
326 | (run 'hg update' to get a working copy) | |||
|
327 | $ hg up 'desc("c_A")' | |||
|
328 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
329 | $ hg commit --amend -m 'c_A2' | |||
|
330 | $ hg rebase -r 'desc("c_B1")' -d . # no easy way to rewrite the message with the rebase | |||
|
331 | rebasing 2:956063ac4557 "c_B1" | |||
|
332 | $ hg up | |||
|
333 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
334 | $ hg commit --amend -m 'c_B2' | |||
|
335 | $ hg log -G | |||
|
336 | @ 5:77ae25d99ff0 c_B2 | |||
|
337 | | | |||
|
338 | o 3:9866d64649a5 c_A2 | |||
|
339 | | | |||
|
340 | o 0:e82fb8d02bbf ROOT | |||
|
341 | ||||
|
342 | $ hg log -G --hidden | |||
|
343 | @ 5:77ae25d99ff0 c_B2 | |||
|
344 | | | |||
|
345 | | x 4:3cf8de21cc22 c_B1 [rewritten using amend as 5:77ae25d99ff0 by celeste (at 1970-01-01 00:00 +0000); ] | |||
|
346 | |/ | |||
|
347 | o 3:9866d64649a5 c_A2 | |||
|
348 | | | |||
|
349 | | x 2:956063ac4557 c_B1 [rewritten using rebase as 4:3cf8de21cc22 by celeste (at 1970-01-01 00:00 +0000); ] | |||
|
350 | | | | |||
|
351 | | x 1:5b5708a437f2 c_A1 [rewritten using amend as 3:9866d64649a5 by celeste (at 1970-01-01 00:00 +0000); ] | |||
|
352 | |/ | |||
|
353 | o 0:e82fb8d02bbf ROOT | |||
|
354 | ||||
|
355 | $ hg debugobsolete | |||
|
356 | 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
357 | d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
358 | ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |||
|
359 | 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
360 | 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |||
|
361 | 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
362 | ||||
|
363 | Celeste now pushes to the server | |||
|
364 | ||||
|
365 | (note: it would be enough to just have direct Celeste -> Alice exchange here. | |||
|
366 | However using a central server seems more common) | |||
|
367 | ||||
|
368 | $ hg push | |||
|
369 | pushing to $TESTTMP/distributed-chain-building/distributed-chain-building/server (glob) | |||
|
370 | searching for changes | |||
|
371 | adding changesets | |||
|
372 | adding manifests | |||
|
373 | adding file changes | |||
|
374 | added 2 changesets with 2 changes to 2 files | |||
|
375 | 6 new obsolescence markers | |||
|
376 | $ cd .. | |||
|
377 | ||||
|
378 | Now Alice pulls from the server, then from Bob | |||
|
379 | ||||
|
380 | Alice first retrieves the new evolution of its changesets and associated markers | |||
|
381 | from the server (note: could be from Celeste directly) | |||
|
382 | ||||
|
383 | $ cd repo-Alice | |||
|
384 | $ hg up 'desc(ROOT)' | |||
|
385 | 0 files updated, 0 files merged, 2 files removed, 0 files unresolved | |||
|
386 | $ hg pull | |||
|
387 | pulling from $TESTTMP/distributed-chain-building/distributed-chain-building/server (glob) | |||
|
388 | searching for changes | |||
|
389 | adding changesets | |||
|
390 | adding manifests | |||
|
391 | adding file changes | |||
|
392 | added 2 changesets with 0 changes to 2 files (+1 heads) | |||
|
393 | 6 new obsolescence markers | |||
|
394 | obsoleted 2 changesets | |||
|
395 | (run 'hg heads' to see heads) | |||
|
396 | $ hg debugobsolete | |||
|
397 | 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
398 | 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
399 | 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
400 | 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |||
|
401 | d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
402 | ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |||
|
403 | ||||
|
404 | Then, she pulls from Bob, pulling predecessors of the changeset she has | |||
|
405 | already pulled. The changesets are not obsoleted in the Bob repo yet. Their | |||
|
406 | successors do not exist in Bob repository yet. | |||
|
407 | ||||
|
408 | $ hg pull ../repo-Bob | |||
|
409 | pulling from ../repo-Bob | |||
|
410 | searching for changes | |||
|
411 | adding changesets | |||
|
412 | adding manifests | |||
|
413 | adding file changes | |||
|
414 | added 2 changesets with 0 changes to 2 files (+1 heads) | |||
|
415 | (run 'hg heads' to see heads) | |||
|
416 | $ hg log -G | |||
|
417 | o 4:77ae25d99ff0 c_B2 | |||
|
418 | | | |||
|
419 | o 3:9866d64649a5 c_A2 | |||
|
420 | | | |||
|
421 | @ 0:e82fb8d02bbf ROOT | |||
|
422 | ||||
|
423 | $ hg debugobsolete | |||
|
424 | 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
425 | 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
426 | 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
427 | 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |||
|
428 | d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
429 | ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |||
|
430 | ||||
|
431 | Same tests, but change coming from a bundle | |||
|
432 | (testing with a bundle is interesting because absolutely no discovery or | |||
|
433 | decision is made in that case, so receiving the changesets are not an option). | |||
|
434 | ||||
|
435 | $ hg rollback | |||
|
436 | repository tip rolled back to revision 4 (undo pull) | |||
|
437 | $ hg log -G | |||
|
438 | o 4:77ae25d99ff0 c_B2 | |||
|
439 | | | |||
|
440 | o 3:9866d64649a5 c_A2 | |||
|
441 | | | |||
|
442 | @ 0:e82fb8d02bbf ROOT | |||
|
443 | ||||
|
444 | $ hg debugobsolete | |||
|
445 | 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
446 | 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
447 | 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
448 | 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |||
|
449 | d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
450 | ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |||
|
451 | $ hg -R ../repo-Bob bundle ../step-1.hg | |||
|
452 | searching for changes | |||
|
453 | 2 changesets found | |||
|
454 | $ hg unbundle ../step-1.hg | |||
|
455 | adding changesets | |||
|
456 | adding manifests | |||
|
457 | adding file changes | |||
|
458 | added 2 changesets with 0 changes to 2 files (+1 heads) | |||
|
459 | (run 'hg heads' to see heads) | |||
|
460 | $ hg log -G | |||
|
461 | o 4:77ae25d99ff0 c_B2 | |||
|
462 | | | |||
|
463 | o 3:9866d64649a5 c_A2 | |||
|
464 | | | |||
|
465 | @ 0:e82fb8d02bbf ROOT | |||
|
466 | ||||
|
467 | $ hg log -G --hidden | |||
|
468 | x 6:956063ac4557 c_B1 [rewritten using amend, rebase as 4:77ae25d99ff0 by celeste (at 1970-01-01 00:00 +0000); ] | |||
|
469 | | | |||
|
470 | x 5:5b5708a437f2 c_A1 [rewritten using amend as 3:9866d64649a5 by celeste (at 1970-01-01 00:00 +0000); ] | |||
|
471 | | | |||
|
472 | | o 4:77ae25d99ff0 c_B2 | |||
|
473 | | | | |||
|
474 | | o 3:9866d64649a5 c_A2 | |||
|
475 | |/ | |||
|
476 | | x 2:ef908e42ce65 c_B0 [rewritten using amend, rebase as 6:956063ac4557 by bob (at 1970-01-01 00:00 +0000); ] | |||
|
477 | | | | |||
|
478 | | x 1:d33b0a3a6464 c_A0 [rewritten using amend as 5:5b5708a437f2 by bob (at 1970-01-01 00:00 +0000); ] | |||
|
479 | |/ | |||
|
480 | @ 0:e82fb8d02bbf ROOT | |||
|
481 | ||||
|
482 | $ hg debugobsolete | |||
|
483 | 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
484 | 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |||
|
485 | 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
486 | 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |||
|
487 | d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |||
|
488 | ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |||
|
489 | ||||
|
490 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now