comparison tests/test-narrow-exchange.t @ 36079:a2a6e724d61a

narrow: import experimental extension from narrowhg revision cb51d673e9c5 Adjustments: * renamed src to hgext/narrow * marked extension experimental * added correct copyright header where it was missing * updated hgrc extension enable line in library.sh * renamed library.sh to narrow-library.sh * dropped all files from repo root as they're not interesting * dropped test-pyflakes.t, test-check-code.t and test-check-py3-compat.t * renamed remaining tests to all be test-narrow-* when they didn't already * fixed test-narrow-expanddirstate.t to refer to narrow and not narrowhg * fixed tests that wanted `update -C .` instead of `merge --abort` * corrected a two-space indent in narrowspec.py * added a missing _() in narrowcommands.py * fixed imports to pass the import checker * narrow only adds its --include and --exclude to clone if sparse isn't enabled to avoid breaking test-duplicateoptions.py. This is a kludge, and we'll need to come up with a better solution in the future. These were more or less the minimum to import something that would pass tests and not create a bunch of files we'll never use. Changes I intend to make as followups: * rework the test-narrow-*-tree.t tests to use the new testcases functionality in run-tests.py * remove lots of monkeypatches of core things Differential Revision: https://phab.mercurial-scm.org/D1974
author Augie Fackler <augie@google.com>
date Mon, 29 Jan 2018 16:19:33 -0500
parents
children 2d82a24d0c78
comparison
equal deleted inserted replaced
36078:7f68235f23ff 36079:a2a6e724d61a
1
2 $ . "$TESTDIR/narrow-library.sh"
3
4 create full repo
5
6 $ hg init master
7 $ cd master
8 $ cat >> .hg/hgrc <<EOF
9 > [narrow]
10 > serveellipses=True
11 > EOF
12
13 $ mkdir inside
14 $ echo 1 > inside/f
15 $ mkdir inside2
16 $ echo 1 > inside2/f
17 $ mkdir outside
18 $ echo 1 > outside/f
19 $ hg ci -Aqm 'initial'
20
21 $ echo 2 > inside/f
22 $ hg ci -qm 'inside 2'
23
24 $ echo 2 > inside2/f
25 $ hg ci -qm 'inside2 2'
26
27 $ echo 2 > outside/f
28 $ hg ci -qm 'outside 2'
29
30 $ cd ..
31
32 $ hg clone --narrow ssh://user@dummy/master narrow --include inside
33 requesting all changes
34 adding changesets
35 adding manifests
36 adding file changes
37 added 3 changesets with 2 changes to 1 files
38 new changesets *:* (glob)
39 updating to branch default
40 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
41
42 $ hg clone --narrow ssh://user@dummy/master narrow2 --include inside --include inside2
43 requesting all changes
44 adding changesets
45 adding manifests
46 adding file changes
47 added 4 changesets with 4 changes to 2 files
48 new changesets *:* (glob)
49 updating to branch default
50 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
51
52 Can push to wider repo if change does not affect paths in wider repo that are
53 not also in narrower repo
54
55 $ cd narrow
56 $ echo 3 > inside/f
57 $ hg ci -m 'inside 3'
58 $ hg push ssh://user@dummy/narrow2
59 pushing to ssh://user@dummy/narrow2
60 searching for changes
61 remote: adding changesets
62 remote: adding manifests
63 remote: adding file changes
64 remote: added 1 changesets with 1 changes to 1 files
65
66 Can push to narrower repo if change affects only paths within remote's
67 narrow spec
68
69 $ cd ../narrow2
70 $ cat >> .hg/hgrc <<EOF
71 > [narrow]
72 > serveellipses=True
73 > EOF
74 $ hg co -r 'desc("inside 3")'
75 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
76 $ echo 4 > inside/f
77 $ hg ci -m 'inside 4'
78 $ hg push ssh://user@dummy/narrow
79 pushing to ssh://user@dummy/narrow
80 searching for changes
81 remote: adding changesets
82 remote: adding manifests
83 remote: adding file changes
84 remote: added 1 changesets with 1 changes to 1 files
85
86 Can push to narrow repo if change affects only paths outside remote's
87 narrow spec
88
89 $ echo 3 > inside2/f
90 $ hg ci -m 'inside2 3'
91 TODO: this should be successful
92 $ hg push ssh://user@dummy/narrow
93 pushing to ssh://user@dummy/narrow
94 searching for changes
95 remote: adding changesets
96 remote: adding manifests
97 remote: adding file changes
98 remote: transaction abort!
99 remote: rollback completed
100 remote: abort: data/inside2/f.i@4a1aa07735e6: unknown parent!
101 abort: stream ended unexpectedly (got 0 bytes, expected 4)
102 [255]
103
104 Can pull from wider repo if change affects only paths outside remote's
105 narrow spec
106 $ echo 4 > inside2/f
107 $ hg ci -m 'inside2 4'
108 $ hg log -G -T '{rev} {node|short} {files}\n'
109 @ 7 d78a96df731d inside2/f
110 |
111 o 6 8c26f5218962 inside2/f
112 |
113 o 5 ba3480e2f9de inside/f
114 |
115 o 4 4e5edd526618 inside/f
116 |
117 o 3 81e7e07b7ab0 outside/f
118 |
119 o 2 f3993b8c0c2b inside2/f
120 |
121 o 1 8cd66ca966b4 inside/f
122 |
123 o 0 c8057d6f53ab inside/f inside2/f outside/f
124
125 $ cd ../narrow
126 $ hg log -G -T '{rev} {node|short} {files}\n'
127 o 4 ba3480e2f9de inside/f
128 |
129 @ 3 4e5edd526618 inside/f
130 |
131 o 2 81e7e07b7ab0 outside/f
132 |
133 o 1 8cd66ca966b4 inside/f
134 |
135 o 0 c8057d6f53ab inside/f inside2/f outside/f
136
137 $ hg pull ssh://user@dummy/narrow2
138 pulling from ssh://user@dummy/narrow2
139 searching for changes
140 remote: abort: unable to resolve parent while packing 'data/inside2/f.i' 3 for changeset 5 (?)
141 adding changesets
142 remote: abort: unexpected error: unable to resolve parent while packing 'data/inside2/f.i' 3 for changeset 5
143 transaction abort!
144 rollback completed
145 abort: pull failed on remote
146 [255]
147
148 Check that the resulting history is valid in the full repo
149
150 $ cd ../narrow2
151 $ hg push ssh://user@dummy/master
152 pushing to ssh://user@dummy/master
153 searching for changes
154 remote: adding changesets
155 remote: adding manifests
156 remote: adding file changes
157 remote: added 4 changesets with 4 changes to 2 files
158 $ cd ../master
159 $ hg verify
160 checking changesets
161 checking manifests
162 crosschecking files in changesets and manifests
163 checking files
164 3 files, 8 changesets, 10 total revisions
165
166 Can not push to wider repo if change affects paths in wider repo that are
167 not also in narrower repo
168 $ cd ../master
169 $ hg co -r 'desc("inside2 4")'
170 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
171 $ echo 5 > inside2/f
172 $ hg ci -m 'inside2 5'
173 $ hg log -G -T '{rev} {node|short} {files}\n'
174 @ 8 5970befb64ba inside2/f
175 |
176 o 7 d78a96df731d inside2/f
177 |
178 o 6 8c26f5218962 inside2/f
179 |
180 o 5 ba3480e2f9de inside/f
181 |
182 o 4 4e5edd526618 inside/f
183 |
184 o 3 81e7e07b7ab0 outside/f
185 |
186 o 2 f3993b8c0c2b inside2/f
187 |
188 o 1 8cd66ca966b4 inside/f
189 |
190 o 0 c8057d6f53ab inside/f inside2/f outside/f
191
192 $ cd ../narrow
193 $ hg pull
194 pulling from ssh://user@dummy/master
195 searching for changes
196 adding changesets
197 adding manifests
198 adding file changes
199 added 1 changesets with 0 changes to 0 files
200 new changesets * (glob)
201 (run 'hg update' to get a working copy)
202 TODO: this should tell the user that their narrow clone does not have the
203 necessary content to be able to push to the target
204 $ hg push ssh://user@dummy/narrow2
205 pushing to ssh://user@dummy/narrow2
206 searching for changes
207 remote has heads on branch 'default' that are not known locally: d78a96df731d
208 abort: push creates new remote head 5970befb64ba!
209 (pull and merge or see 'hg help push' for details about pushing new heads)
210 [255]