##// END OF EJS Templates
largefiles: adapt remotestore._getfile to batched statlfile...
Mads Kiilerich -
r18484:d43823f9 stable
parent child Browse files
Show More
@@ -1,111 +1,114 b''
1 # Copyright 2010-2011 Fog Creek Software
1 # Copyright 2010-2011 Fog Creek Software
2 # Copyright 2010-2011 Unity Technologies
2 # Copyright 2010-2011 Unity Technologies
3 #
3 #
4 # This software may be used and distributed according to the terms of the
4 # This software may be used and distributed according to the terms of the
5 # GNU General Public License version 2 or any later version.
5 # GNU General Public License version 2 or any later version.
6
6
7 '''remote largefile store; the base class for wirestore'''
7 '''remote largefile store; the base class for wirestore'''
8
8
9 import urllib2
9 import urllib2
10
10
11 from mercurial import util
11 from mercurial import util
12 from mercurial.i18n import _
12 from mercurial.i18n import _
13 from mercurial.wireproto import remotebatch
13 from mercurial.wireproto import remotebatch
14
14
15 import lfutil
15 import lfutil
16 import basestore
16 import basestore
17
17
18 class remotestore(basestore.basestore):
18 class remotestore(basestore.basestore):
19 '''a largefile store accessed over a network'''
19 '''a largefile store accessed over a network'''
20 def __init__(self, ui, repo, url):
20 def __init__(self, ui, repo, url):
21 super(remotestore, self).__init__(ui, repo, url)
21 super(remotestore, self).__init__(ui, repo, url)
22
22
23 def put(self, source, hash):
23 def put(self, source, hash):
24 if self.sendfile(source, hash):
24 if self.sendfile(source, hash):
25 raise util.Abort(
25 raise util.Abort(
26 _('remotestore: could not put %s to remote store %s')
26 _('remotestore: could not put %s to remote store %s')
27 % (source, self.url))
27 % (source, self.url))
28 self.ui.debug(
28 self.ui.debug(
29 _('remotestore: put %s to remote store %s') % (source, self.url))
29 _('remotestore: put %s to remote store %s') % (source, self.url))
30
30
31 def exists(self, hashes):
31 def exists(self, hashes):
32 return self._verify(hashes)
32 return self._verify(hashes)
33
33
34 def sendfile(self, filename, hash):
34 def sendfile(self, filename, hash):
35 self.ui.debug('remotestore: sendfile(%s, %s)\n' % (filename, hash))
35 self.ui.debug('remotestore: sendfile(%s, %s)\n' % (filename, hash))
36 fd = None
36 fd = None
37 try:
37 try:
38 try:
38 try:
39 fd = lfutil.httpsendfile(self.ui, filename)
39 fd = lfutil.httpsendfile(self.ui, filename)
40 except IOError, e:
40 except IOError, e:
41 raise util.Abort(
41 raise util.Abort(
42 _('remotestore: could not open file %s: %s')
42 _('remotestore: could not open file %s: %s')
43 % (filename, str(e)))
43 % (filename, str(e)))
44 return self._put(hash, fd)
44 return self._put(hash, fd)
45 finally:
45 finally:
46 if fd:
46 if fd:
47 fd.close()
47 fd.close()
48
48
49 def _getfile(self, tmpfile, filename, hash):
49 def _getfile(self, tmpfile, filename, hash):
50 # quit if the largefile isn't there
50 # quit if the largefile isn't there
51 stat = self._stat(hash)
51 stat = self._stat([hash])[hash]
52 if stat == 1:
52 if stat == 1:
53 raise util.Abort(_('remotestore: largefile %s is invalid') % hash)
53 raise util.Abort(_('remotestore: largefile %s is invalid') % hash)
54 elif stat == 2:
54 elif stat == 2:
55 raise util.Abort(_('remotestore: largefile %s is missing') % hash)
55 raise util.Abort(_('remotestore: largefile %s is missing') % hash)
56 elif stat != 0:
57 raise RuntimeError('error getting file: unexpected response from '
58 'statlfile (%r)' % stat)
56
59
57 try:
60 try:
58 length, infile = self._get(hash)
61 length, infile = self._get(hash)
59 except urllib2.HTTPError, e:
62 except urllib2.HTTPError, e:
60 # 401s get converted to util.Aborts; everything else is fine being
63 # 401s get converted to util.Aborts; everything else is fine being
61 # turned into a StoreError
64 # turned into a StoreError
62 raise basestore.StoreError(filename, hash, self.url, str(e))
65 raise basestore.StoreError(filename, hash, self.url, str(e))
63 except urllib2.URLError, e:
66 except urllib2.URLError, e:
64 # This usually indicates a connection problem, so don't
67 # This usually indicates a connection problem, so don't
65 # keep trying with the other files... they will probably
68 # keep trying with the other files... they will probably
66 # all fail too.
69 # all fail too.
67 raise util.Abort('%s: %s' % (self.url, e.reason))
70 raise util.Abort('%s: %s' % (self.url, e.reason))
68 except IOError, e:
71 except IOError, e:
69 raise basestore.StoreError(filename, hash, self.url, str(e))
72 raise basestore.StoreError(filename, hash, self.url, str(e))
70
73
71 # Mercurial does not close its SSH connections after writing a stream
74 # Mercurial does not close its SSH connections after writing a stream
72 if length is not None:
75 if length is not None:
73 infile = lfutil.limitreader(infile, length)
76 infile = lfutil.limitreader(infile, length)
74 return lfutil.copyandhash(lfutil.blockstream(infile), tmpfile)
77 return lfutil.copyandhash(lfutil.blockstream(infile), tmpfile)
75
78
76 def _verify(self, hashes):
79 def _verify(self, hashes):
77 return dict((h, s == 0) for (h, s) in self._stat(hashes).iteritems())
80 return dict((h, s == 0) for (h, s) in self._stat(hashes).iteritems())
78
81
79 def _verifyfile(self, cctx, cset, contents, standin, verified):
82 def _verifyfile(self, cctx, cset, contents, standin, verified):
80 filename = lfutil.splitstandin(standin)
83 filename = lfutil.splitstandin(standin)
81 if not filename:
84 if not filename:
82 return False
85 return False
83 fctx = cctx[standin]
86 fctx = cctx[standin]
84 key = (filename, fctx.filenode())
87 key = (filename, fctx.filenode())
85 if key in verified:
88 if key in verified:
86 return False
89 return False
87
90
88 verified.add(key)
91 verified.add(key)
89
92
90 expecthash = fctx.data()[0:40]
93 expecthash = fctx.data()[0:40]
91 stat = self._stat([expecthash])[expecthash]
94 stat = self._stat([expecthash])[expecthash]
92 if not stat:
95 if not stat:
93 return False
96 return False
94 elif stat == 1:
97 elif stat == 1:
95 self.ui.warn(
98 self.ui.warn(
96 _('changeset %s: %s: contents differ\n')
99 _('changeset %s: %s: contents differ\n')
97 % (cset, filename))
100 % (cset, filename))
98 return True # failed
101 return True # failed
99 elif stat == 2:
102 elif stat == 2:
100 self.ui.warn(
103 self.ui.warn(
101 _('changeset %s: %s missing\n')
104 _('changeset %s: %s missing\n')
102 % (cset, filename))
105 % (cset, filename))
103 return True # failed
106 return True # failed
104 else:
107 else:
105 raise RuntimeError('verify failed: unexpected response from '
108 raise RuntimeError('verify failed: unexpected response from '
106 'statlfile (%r)' % stat)
109 'statlfile (%r)' % stat)
107
110
108 def batch(self):
111 def batch(self):
109 '''Support for remote batching.'''
112 '''Support for remote batching.'''
110 return remotebatch(self)
113 return remotebatch(self)
111
114
@@ -1,1991 +1,1988 b''
1 $ USERCACHE="$TESTTMP/cache"; export USERCACHE
1 $ USERCACHE="$TESTTMP/cache"; export USERCACHE
2 $ mkdir "${USERCACHE}"
2 $ mkdir "${USERCACHE}"
3 $ cat >> $HGRCPATH <<EOF
3 $ cat >> $HGRCPATH <<EOF
4 > [extensions]
4 > [extensions]
5 > largefiles=
5 > largefiles=
6 > purge=
6 > purge=
7 > rebase=
7 > rebase=
8 > transplant=
8 > transplant=
9 > [phases]
9 > [phases]
10 > publish=False
10 > publish=False
11 > [largefiles]
11 > [largefiles]
12 > minsize=2
12 > minsize=2
13 > patterns=glob:**.dat
13 > patterns=glob:**.dat
14 > usercache=${USERCACHE}
14 > usercache=${USERCACHE}
15 > [hooks]
15 > [hooks]
16 > precommit=sh -c "echo \\"Invoking status precommit hook\\"; hg status"
16 > precommit=sh -c "echo \\"Invoking status precommit hook\\"; hg status"
17 > EOF
17 > EOF
18
18
19 Create the repo with a couple of revisions of both large and normal
19 Create the repo with a couple of revisions of both large and normal
20 files.
20 files.
21 Test status and dirstate of largefiles and that summary output is correct.
21 Test status and dirstate of largefiles and that summary output is correct.
22
22
23 $ hg init a
23 $ hg init a
24 $ cd a
24 $ cd a
25 $ mkdir sub
25 $ mkdir sub
26 $ echo normal1 > normal1
26 $ echo normal1 > normal1
27 $ echo normal2 > sub/normal2
27 $ echo normal2 > sub/normal2
28 $ echo large1 > large1
28 $ echo large1 > large1
29 $ echo large2 > sub/large2
29 $ echo large2 > sub/large2
30 $ hg add normal1 sub/normal2
30 $ hg add normal1 sub/normal2
31 $ hg add --large large1 sub/large2
31 $ hg add --large large1 sub/large2
32 $ hg commit -m "add files"
32 $ hg commit -m "add files"
33 Invoking status precommit hook
33 Invoking status precommit hook
34 A large1
34 A large1
35 A normal1
35 A normal1
36 A sub/large2
36 A sub/large2
37 A sub/normal2
37 A sub/normal2
38 $ touch large1 sub/large2
38 $ touch large1 sub/large2
39 $ sleep 1
39 $ sleep 1
40 $ hg st
40 $ hg st
41 $ hg debugstate --nodates
41 $ hg debugstate --nodates
42 n 644 41 .hglf/large1
42 n 644 41 .hglf/large1
43 n 644 41 .hglf/sub/large2
43 n 644 41 .hglf/sub/large2
44 n 644 8 normal1
44 n 644 8 normal1
45 n 644 8 sub/normal2
45 n 644 8 sub/normal2
46 $ hg debugstate --large
46 $ hg debugstate --large
47 n 644 7 large1
47 n 644 7 large1
48 n 644 7 sub/large2
48 n 644 7 sub/large2
49 $ echo normal11 > normal1
49 $ echo normal11 > normal1
50 $ echo normal22 > sub/normal2
50 $ echo normal22 > sub/normal2
51 $ echo large11 > large1
51 $ echo large11 > large1
52 $ echo large22 > sub/large2
52 $ echo large22 > sub/large2
53 $ hg commit -m "edit files"
53 $ hg commit -m "edit files"
54 Invoking status precommit hook
54 Invoking status precommit hook
55 M large1
55 M large1
56 M normal1
56 M normal1
57 M sub/large2
57 M sub/large2
58 M sub/normal2
58 M sub/normal2
59 $ hg sum --large
59 $ hg sum --large
60 parent: 1:ce8896473775 tip
60 parent: 1:ce8896473775 tip
61 edit files
61 edit files
62 branch: default
62 branch: default
63 commit: (clean)
63 commit: (clean)
64 update: (current)
64 update: (current)
65 largefiles: (no remote repo)
65 largefiles: (no remote repo)
66
66
67 Commit preserved largefile contents.
67 Commit preserved largefile contents.
68
68
69 $ cat normal1
69 $ cat normal1
70 normal11
70 normal11
71 $ cat large1
71 $ cat large1
72 large11
72 large11
73 $ cat sub/normal2
73 $ cat sub/normal2
74 normal22
74 normal22
75 $ cat sub/large2
75 $ cat sub/large2
76 large22
76 large22
77
77
78 Test status, subdir and unknown files
78 Test status, subdir and unknown files
79
79
80 $ echo unknown > sub/unknown
80 $ echo unknown > sub/unknown
81 $ hg st --all
81 $ hg st --all
82 ? sub/unknown
82 ? sub/unknown
83 C large1
83 C large1
84 C normal1
84 C normal1
85 C sub/large2
85 C sub/large2
86 C sub/normal2
86 C sub/normal2
87 $ hg st --all sub
87 $ hg st --all sub
88 ? sub/unknown
88 ? sub/unknown
89 C sub/large2
89 C sub/large2
90 C sub/normal2
90 C sub/normal2
91 $ rm sub/unknown
91 $ rm sub/unknown
92
92
93 Test messages and exit codes for remove warning cases
93 Test messages and exit codes for remove warning cases
94
94
95 $ hg remove -A large1
95 $ hg remove -A large1
96 not removing large1: file still exists
96 not removing large1: file still exists
97 [1]
97 [1]
98 $ echo 'modified' > large1
98 $ echo 'modified' > large1
99 $ hg remove large1
99 $ hg remove large1
100 not removing large1: file is modified (use -f to force removal)
100 not removing large1: file is modified (use -f to force removal)
101 [1]
101 [1]
102 $ echo 'new' > normalnew
102 $ echo 'new' > normalnew
103 $ hg add normalnew
103 $ hg add normalnew
104 $ echo 'new' > largenew
104 $ echo 'new' > largenew
105 $ hg add --large normalnew
105 $ hg add --large normalnew
106 normalnew already tracked!
106 normalnew already tracked!
107 $ hg remove normalnew largenew
107 $ hg remove normalnew largenew
108 not removing largenew: file is untracked
108 not removing largenew: file is untracked
109 not removing normalnew: file has been marked for add (use forget to undo)
109 not removing normalnew: file has been marked for add (use forget to undo)
110 [1]
110 [1]
111 $ rm normalnew largenew
111 $ rm normalnew largenew
112 $ hg up -Cq
112 $ hg up -Cq
113
113
114 Remove both largefiles and normal files.
114 Remove both largefiles and normal files.
115
115
116 $ hg remove normal1 large1
116 $ hg remove normal1 large1
117 $ hg status large1
117 $ hg status large1
118 R large1
118 R large1
119 $ hg commit -m "remove files"
119 $ hg commit -m "remove files"
120 Invoking status precommit hook
120 Invoking status precommit hook
121 R large1
121 R large1
122 R normal1
122 R normal1
123 $ ls
123 $ ls
124 sub
124 sub
125 $ echo "testlargefile" > large1-test
125 $ echo "testlargefile" > large1-test
126 $ hg add --large large1-test
126 $ hg add --large large1-test
127 $ hg st
127 $ hg st
128 A large1-test
128 A large1-test
129 $ hg rm large1-test
129 $ hg rm large1-test
130 not removing large1-test: file has been marked for add (use forget to undo)
130 not removing large1-test: file has been marked for add (use forget to undo)
131 [1]
131 [1]
132 $ hg st
132 $ hg st
133 A large1-test
133 A large1-test
134 $ hg forget large1-test
134 $ hg forget large1-test
135 $ hg st
135 $ hg st
136 ? large1-test
136 ? large1-test
137 $ hg remove large1-test
137 $ hg remove large1-test
138 not removing large1-test: file is untracked
138 not removing large1-test: file is untracked
139 [1]
139 [1]
140 $ hg forget large1-test
140 $ hg forget large1-test
141 not removing large1-test: file is already untracked
141 not removing large1-test: file is already untracked
142 [1]
142 [1]
143 $ rm large1-test
143 $ rm large1-test
144
144
145 Copy both largefiles and normal files (testing that status output is correct).
145 Copy both largefiles and normal files (testing that status output is correct).
146
146
147 $ hg cp sub/normal2 normal1
147 $ hg cp sub/normal2 normal1
148 $ hg cp sub/large2 large1
148 $ hg cp sub/large2 large1
149 $ hg commit -m "copy files"
149 $ hg commit -m "copy files"
150 Invoking status precommit hook
150 Invoking status precommit hook
151 A large1
151 A large1
152 A normal1
152 A normal1
153 $ cat normal1
153 $ cat normal1
154 normal22
154 normal22
155 $ cat large1
155 $ cat large1
156 large22
156 large22
157
157
158 Test moving largefiles and verify that normal files are also unaffected.
158 Test moving largefiles and verify that normal files are also unaffected.
159
159
160 $ hg mv normal1 normal3
160 $ hg mv normal1 normal3
161 $ hg mv large1 large3
161 $ hg mv large1 large3
162 $ hg mv sub/normal2 sub/normal4
162 $ hg mv sub/normal2 sub/normal4
163 $ hg mv sub/large2 sub/large4
163 $ hg mv sub/large2 sub/large4
164 $ hg commit -m "move files"
164 $ hg commit -m "move files"
165 Invoking status precommit hook
165 Invoking status precommit hook
166 A large3
166 A large3
167 A normal3
167 A normal3
168 A sub/large4
168 A sub/large4
169 A sub/normal4
169 A sub/normal4
170 R large1
170 R large1
171 R normal1
171 R normal1
172 R sub/large2
172 R sub/large2
173 R sub/normal2
173 R sub/normal2
174 $ cat normal3
174 $ cat normal3
175 normal22
175 normal22
176 $ cat large3
176 $ cat large3
177 large22
177 large22
178 $ cat sub/normal4
178 $ cat sub/normal4
179 normal22
179 normal22
180 $ cat sub/large4
180 $ cat sub/large4
181 large22
181 large22
182
182
183 Test copies and moves from a directory other than root (issue3516)
183 Test copies and moves from a directory other than root (issue3516)
184
184
185 $ cd ..
185 $ cd ..
186 $ hg init lf_cpmv
186 $ hg init lf_cpmv
187 $ cd lf_cpmv
187 $ cd lf_cpmv
188 $ mkdir dira
188 $ mkdir dira
189 $ mkdir dira/dirb
189 $ mkdir dira/dirb
190 $ touch dira/dirb/largefile
190 $ touch dira/dirb/largefile
191 $ hg add --large dira/dirb/largefile
191 $ hg add --large dira/dirb/largefile
192 $ hg commit -m "added"
192 $ hg commit -m "added"
193 Invoking status precommit hook
193 Invoking status precommit hook
194 A dira/dirb/largefile
194 A dira/dirb/largefile
195 $ cd dira
195 $ cd dira
196 $ hg cp dirb/largefile foo/largefile
196 $ hg cp dirb/largefile foo/largefile
197 $ hg ci -m "deep copy"
197 $ hg ci -m "deep copy"
198 Invoking status precommit hook
198 Invoking status precommit hook
199 A dira/foo/largefile
199 A dira/foo/largefile
200 $ find . | sort
200 $ find . | sort
201 .
201 .
202 ./dirb
202 ./dirb
203 ./dirb/largefile
203 ./dirb/largefile
204 ./foo
204 ./foo
205 ./foo/largefile
205 ./foo/largefile
206 $ hg mv foo/largefile baz/largefile
206 $ hg mv foo/largefile baz/largefile
207 $ hg ci -m "moved"
207 $ hg ci -m "moved"
208 Invoking status precommit hook
208 Invoking status precommit hook
209 A dira/baz/largefile
209 A dira/baz/largefile
210 R dira/foo/largefile
210 R dira/foo/largefile
211 $ find . | sort
211 $ find . | sort
212 .
212 .
213 ./baz
213 ./baz
214 ./baz/largefile
214 ./baz/largefile
215 ./dirb
215 ./dirb
216 ./dirb/largefile
216 ./dirb/largefile
217 ./foo
217 ./foo
218 $ cd ../../a
218 $ cd ../../a
219
219
220 #if serve
220 #if serve
221 Test display of largefiles in hgweb
221 Test display of largefiles in hgweb
222
222
223 $ hg serve -d -p $HGPORT --pid-file ../hg.pid
223 $ hg serve -d -p $HGPORT --pid-file ../hg.pid
224 $ cat ../hg.pid >> $DAEMON_PIDS
224 $ cat ../hg.pid >> $DAEMON_PIDS
225 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'file/tip/?style=raw'
225 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'file/tip/?style=raw'
226 200 Script output follows
226 200 Script output follows
227
227
228
228
229 drwxr-xr-x sub
229 drwxr-xr-x sub
230 -rw-r--r-- 41 large3
230 -rw-r--r-- 41 large3
231 -rw-r--r-- 9 normal3
231 -rw-r--r-- 9 normal3
232
232
233
233
234 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'file/tip/sub/?style=raw'
234 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'file/tip/sub/?style=raw'
235 200 Script output follows
235 200 Script output follows
236
236
237
237
238 -rw-r--r-- 41 large4
238 -rw-r--r-- 41 large4
239 -rw-r--r-- 9 normal4
239 -rw-r--r-- 9 normal4
240
240
241
241
242 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
242 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
243 #endif
243 #endif
244
244
245 Test archiving the various revisions. These hit corner cases known with
245 Test archiving the various revisions. These hit corner cases known with
246 archiving.
246 archiving.
247
247
248 $ hg archive -r 0 ../archive0
248 $ hg archive -r 0 ../archive0
249 $ hg archive -r 1 ../archive1
249 $ hg archive -r 1 ../archive1
250 $ hg archive -r 2 ../archive2
250 $ hg archive -r 2 ../archive2
251 $ hg archive -r 3 ../archive3
251 $ hg archive -r 3 ../archive3
252 $ hg archive -r 4 ../archive4
252 $ hg archive -r 4 ../archive4
253 $ cd ../archive0
253 $ cd ../archive0
254 $ cat normal1
254 $ cat normal1
255 normal1
255 normal1
256 $ cat large1
256 $ cat large1
257 large1
257 large1
258 $ cat sub/normal2
258 $ cat sub/normal2
259 normal2
259 normal2
260 $ cat sub/large2
260 $ cat sub/large2
261 large2
261 large2
262 $ cd ../archive1
262 $ cd ../archive1
263 $ cat normal1
263 $ cat normal1
264 normal11
264 normal11
265 $ cat large1
265 $ cat large1
266 large11
266 large11
267 $ cat sub/normal2
267 $ cat sub/normal2
268 normal22
268 normal22
269 $ cat sub/large2
269 $ cat sub/large2
270 large22
270 large22
271 $ cd ../archive2
271 $ cd ../archive2
272 $ ls
272 $ ls
273 sub
273 sub
274 $ cat sub/normal2
274 $ cat sub/normal2
275 normal22
275 normal22
276 $ cat sub/large2
276 $ cat sub/large2
277 large22
277 large22
278 $ cd ../archive3
278 $ cd ../archive3
279 $ cat normal1
279 $ cat normal1
280 normal22
280 normal22
281 $ cat large1
281 $ cat large1
282 large22
282 large22
283 $ cat sub/normal2
283 $ cat sub/normal2
284 normal22
284 normal22
285 $ cat sub/large2
285 $ cat sub/large2
286 large22
286 large22
287 $ cd ../archive4
287 $ cd ../archive4
288 $ cat normal3
288 $ cat normal3
289 normal22
289 normal22
290 $ cat large3
290 $ cat large3
291 large22
291 large22
292 $ cat sub/normal4
292 $ cat sub/normal4
293 normal22
293 normal22
294 $ cat sub/large4
294 $ cat sub/large4
295 large22
295 large22
296
296
297 Commit corner case: specify files to commit.
297 Commit corner case: specify files to commit.
298
298
299 $ cd ../a
299 $ cd ../a
300 $ echo normal3 > normal3
300 $ echo normal3 > normal3
301 $ echo large3 > large3
301 $ echo large3 > large3
302 $ echo normal4 > sub/normal4
302 $ echo normal4 > sub/normal4
303 $ echo large4 > sub/large4
303 $ echo large4 > sub/large4
304 $ hg commit normal3 large3 sub/normal4 sub/large4 -m "edit files again"
304 $ hg commit normal3 large3 sub/normal4 sub/large4 -m "edit files again"
305 Invoking status precommit hook
305 Invoking status precommit hook
306 M large3
306 M large3
307 M normal3
307 M normal3
308 M sub/large4
308 M sub/large4
309 M sub/normal4
309 M sub/normal4
310 $ cat normal3
310 $ cat normal3
311 normal3
311 normal3
312 $ cat large3
312 $ cat large3
313 large3
313 large3
314 $ cat sub/normal4
314 $ cat sub/normal4
315 normal4
315 normal4
316 $ cat sub/large4
316 $ cat sub/large4
317 large4
317 large4
318
318
319 One more commit corner case: commit from a subdirectory.
319 One more commit corner case: commit from a subdirectory.
320
320
321 $ cd ../a
321 $ cd ../a
322 $ echo normal33 > normal3
322 $ echo normal33 > normal3
323 $ echo large33 > large3
323 $ echo large33 > large3
324 $ echo normal44 > sub/normal4
324 $ echo normal44 > sub/normal4
325 $ echo large44 > sub/large4
325 $ echo large44 > sub/large4
326 $ cd sub
326 $ cd sub
327 $ hg commit -m "edit files yet again"
327 $ hg commit -m "edit files yet again"
328 Invoking status precommit hook
328 Invoking status precommit hook
329 M large3
329 M large3
330 M normal3
330 M normal3
331 M sub/large4
331 M sub/large4
332 M sub/normal4
332 M sub/normal4
333 $ cat ../normal3
333 $ cat ../normal3
334 normal33
334 normal33
335 $ cat ../large3
335 $ cat ../large3
336 large33
336 large33
337 $ cat normal4
337 $ cat normal4
338 normal44
338 normal44
339 $ cat large4
339 $ cat large4
340 large44
340 large44
341
341
342 Committing standins is not allowed.
342 Committing standins is not allowed.
343
343
344 $ cd ..
344 $ cd ..
345 $ echo large3 > large3
345 $ echo large3 > large3
346 $ hg commit .hglf/large3 -m "try to commit standin"
346 $ hg commit .hglf/large3 -m "try to commit standin"
347 abort: file ".hglf/large3" is a largefile standin
347 abort: file ".hglf/large3" is a largefile standin
348 (commit the largefile itself instead)
348 (commit the largefile itself instead)
349 [255]
349 [255]
350
350
351 Corner cases for adding largefiles.
351 Corner cases for adding largefiles.
352
352
353 $ echo large5 > large5
353 $ echo large5 > large5
354 $ hg add --large large5
354 $ hg add --large large5
355 $ hg add --large large5
355 $ hg add --large large5
356 large5 already a largefile
356 large5 already a largefile
357 $ mkdir sub2
357 $ mkdir sub2
358 $ echo large6 > sub2/large6
358 $ echo large6 > sub2/large6
359 $ echo large7 > sub2/large7
359 $ echo large7 > sub2/large7
360 $ hg add --large sub2
360 $ hg add --large sub2
361 adding sub2/large6 as a largefile (glob)
361 adding sub2/large6 as a largefile (glob)
362 adding sub2/large7 as a largefile (glob)
362 adding sub2/large7 as a largefile (glob)
363 $ hg st
363 $ hg st
364 M large3
364 M large3
365 A large5
365 A large5
366 A sub2/large6
366 A sub2/large6
367 A sub2/large7
367 A sub2/large7
368
368
369 Committing directories containing only largefiles.
369 Committing directories containing only largefiles.
370
370
371 $ mkdir -p z/y/x/m
371 $ mkdir -p z/y/x/m
372 $ touch z/y/x/m/large1
372 $ touch z/y/x/m/large1
373 $ touch z/y/x/large2
373 $ touch z/y/x/large2
374 $ hg add --large z/y/x/m/large1 z/y/x/large2
374 $ hg add --large z/y/x/m/large1 z/y/x/large2
375 $ hg commit -m "Subdir with directory only containing largefiles" z
375 $ hg commit -m "Subdir with directory only containing largefiles" z
376 Invoking status precommit hook
376 Invoking status precommit hook
377 M large3
377 M large3
378 A large5
378 A large5
379 A sub2/large6
379 A sub2/large6
380 A sub2/large7
380 A sub2/large7
381 A z/y/x/large2
381 A z/y/x/large2
382 A z/y/x/m/large1
382 A z/y/x/m/large1
383 $ hg rollback --quiet
383 $ hg rollback --quiet
384 $ touch z/y/x/m/normal
384 $ touch z/y/x/m/normal
385 $ hg add z/y/x/m/normal
385 $ hg add z/y/x/m/normal
386 $ hg commit -m "Subdir with mixed contents" z
386 $ hg commit -m "Subdir with mixed contents" z
387 Invoking status precommit hook
387 Invoking status precommit hook
388 M large3
388 M large3
389 A large5
389 A large5
390 A sub2/large6
390 A sub2/large6
391 A sub2/large7
391 A sub2/large7
392 A z/y/x/large2
392 A z/y/x/large2
393 A z/y/x/m/large1
393 A z/y/x/m/large1
394 A z/y/x/m/normal
394 A z/y/x/m/normal
395 $ hg st
395 $ hg st
396 M large3
396 M large3
397 A large5
397 A large5
398 A sub2/large6
398 A sub2/large6
399 A sub2/large7
399 A sub2/large7
400 $ hg rollback --quiet
400 $ hg rollback --quiet
401 $ hg revert z/y/x/large2 z/y/x/m/large1
401 $ hg revert z/y/x/large2 z/y/x/m/large1
402 $ rm z/y/x/large2 z/y/x/m/large1
402 $ rm z/y/x/large2 z/y/x/m/large1
403 $ hg commit -m "Subdir with normal contents" z
403 $ hg commit -m "Subdir with normal contents" z
404 Invoking status precommit hook
404 Invoking status precommit hook
405 M large3
405 M large3
406 A large5
406 A large5
407 A sub2/large6
407 A sub2/large6
408 A sub2/large7
408 A sub2/large7
409 A z/y/x/m/normal
409 A z/y/x/m/normal
410 $ hg st
410 $ hg st
411 M large3
411 M large3
412 A large5
412 A large5
413 A sub2/large6
413 A sub2/large6
414 A sub2/large7
414 A sub2/large7
415 $ hg rollback --quiet
415 $ hg rollback --quiet
416 $ hg revert --quiet z
416 $ hg revert --quiet z
417 $ hg commit -m "Empty subdir" z
417 $ hg commit -m "Empty subdir" z
418 abort: z: no match under directory!
418 abort: z: no match under directory!
419 [255]
419 [255]
420 $ rm -rf z
420 $ rm -rf z
421 $ hg ci -m "standin" .hglf
421 $ hg ci -m "standin" .hglf
422 abort: file ".hglf" is a largefile standin
422 abort: file ".hglf" is a largefile standin
423 (commit the largefile itself instead)
423 (commit the largefile itself instead)
424 [255]
424 [255]
425
425
426 Test "hg status" with combination of 'file pattern' and 'directory
426 Test "hg status" with combination of 'file pattern' and 'directory
427 pattern' for largefiles:
427 pattern' for largefiles:
428
428
429 $ hg status sub2/large6 sub2
429 $ hg status sub2/large6 sub2
430 A sub2/large6
430 A sub2/large6
431 A sub2/large7
431 A sub2/large7
432
432
433 Config settings (pattern **.dat, minsize 2 MB) are respected.
433 Config settings (pattern **.dat, minsize 2 MB) are respected.
434
434
435 $ echo testdata > test.dat
435 $ echo testdata > test.dat
436 $ dd bs=1k count=2k if=/dev/zero of=reallylarge > /dev/null 2> /dev/null
436 $ dd bs=1k count=2k if=/dev/zero of=reallylarge > /dev/null 2> /dev/null
437 $ hg add
437 $ hg add
438 adding reallylarge as a largefile
438 adding reallylarge as a largefile
439 adding test.dat as a largefile
439 adding test.dat as a largefile
440
440
441 Test that minsize and --lfsize handle float values;
441 Test that minsize and --lfsize handle float values;
442 also tests that --lfsize overrides largefiles.minsize.
442 also tests that --lfsize overrides largefiles.minsize.
443 (0.250 MB = 256 kB = 262144 B)
443 (0.250 MB = 256 kB = 262144 B)
444
444
445 $ dd if=/dev/zero of=ratherlarge bs=1024 count=256 > /dev/null 2> /dev/null
445 $ dd if=/dev/zero of=ratherlarge bs=1024 count=256 > /dev/null 2> /dev/null
446 $ dd if=/dev/zero of=medium bs=1024 count=128 > /dev/null 2> /dev/null
446 $ dd if=/dev/zero of=medium bs=1024 count=128 > /dev/null 2> /dev/null
447 $ hg --config largefiles.minsize=.25 add
447 $ hg --config largefiles.minsize=.25 add
448 adding ratherlarge as a largefile
448 adding ratherlarge as a largefile
449 adding medium
449 adding medium
450 $ hg forget medium
450 $ hg forget medium
451 $ hg --config largefiles.minsize=.25 add --lfsize=.125
451 $ hg --config largefiles.minsize=.25 add --lfsize=.125
452 adding medium as a largefile
452 adding medium as a largefile
453 $ dd if=/dev/zero of=notlarge bs=1024 count=127 > /dev/null 2> /dev/null
453 $ dd if=/dev/zero of=notlarge bs=1024 count=127 > /dev/null 2> /dev/null
454 $ hg --config largefiles.minsize=.25 add --lfsize=.125
454 $ hg --config largefiles.minsize=.25 add --lfsize=.125
455 adding notlarge
455 adding notlarge
456 $ hg forget notlarge
456 $ hg forget notlarge
457
457
458 Test forget on largefiles.
458 Test forget on largefiles.
459
459
460 $ hg forget large3 large5 test.dat reallylarge ratherlarge medium
460 $ hg forget large3 large5 test.dat reallylarge ratherlarge medium
461 $ hg commit -m "add/edit more largefiles"
461 $ hg commit -m "add/edit more largefiles"
462 Invoking status precommit hook
462 Invoking status precommit hook
463 A sub2/large6
463 A sub2/large6
464 A sub2/large7
464 A sub2/large7
465 R large3
465 R large3
466 ? large5
466 ? large5
467 ? medium
467 ? medium
468 ? notlarge
468 ? notlarge
469 ? ratherlarge
469 ? ratherlarge
470 ? reallylarge
470 ? reallylarge
471 ? test.dat
471 ? test.dat
472 $ hg st
472 $ hg st
473 ? large3
473 ? large3
474 ? large5
474 ? large5
475 ? medium
475 ? medium
476 ? notlarge
476 ? notlarge
477 ? ratherlarge
477 ? ratherlarge
478 ? reallylarge
478 ? reallylarge
479 ? test.dat
479 ? test.dat
480
480
481 Purge with largefiles: verify that largefiles are still in the working
481 Purge with largefiles: verify that largefiles are still in the working
482 dir after a purge.
482 dir after a purge.
483
483
484 $ hg purge --all
484 $ hg purge --all
485 $ cat sub/large4
485 $ cat sub/large4
486 large44
486 large44
487 $ cat sub2/large6
487 $ cat sub2/large6
488 large6
488 large6
489 $ cat sub2/large7
489 $ cat sub2/large7
490 large7
490 large7
491
491
492 Test addremove: verify that files that should be added as largfiles are added as
492 Test addremove: verify that files that should be added as largfiles are added as
493 such and that already-existing largfiles are not added as normal files by
493 such and that already-existing largfiles are not added as normal files by
494 accident.
494 accident.
495
495
496 $ rm normal3
496 $ rm normal3
497 $ rm sub/large4
497 $ rm sub/large4
498 $ echo "testing addremove with patterns" > testaddremove.dat
498 $ echo "testing addremove with patterns" > testaddremove.dat
499 $ echo "normaladdremove" > normaladdremove
499 $ echo "normaladdremove" > normaladdremove
500 $ hg addremove
500 $ hg addremove
501 removing sub/large4
501 removing sub/large4
502 adding testaddremove.dat as a largefile
502 adding testaddremove.dat as a largefile
503 removing normal3
503 removing normal3
504 adding normaladdremove
504 adding normaladdremove
505
505
506 Test addremove with -R
506 Test addremove with -R
507
507
508 $ hg up -C
508 $ hg up -C
509 getting changed largefiles
509 getting changed largefiles
510 1 largefiles updated, 0 removed
510 1 largefiles updated, 0 removed
511 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
511 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
512 $ rm normal3
512 $ rm normal3
513 $ rm sub/large4
513 $ rm sub/large4
514 $ echo "testing addremove with patterns" > testaddremove.dat
514 $ echo "testing addremove with patterns" > testaddremove.dat
515 $ echo "normaladdremove" > normaladdremove
515 $ echo "normaladdremove" > normaladdremove
516 $ cd ..
516 $ cd ..
517 $ hg -R a addremove
517 $ hg -R a addremove
518 removing sub/large4
518 removing sub/large4
519 adding a/testaddremove.dat as a largefile (glob)
519 adding a/testaddremove.dat as a largefile (glob)
520 removing normal3
520 removing normal3
521 adding normaladdremove
521 adding normaladdremove
522 $ cd a
522 $ cd a
523
523
524 Test 3364
524 Test 3364
525 $ hg clone . ../addrm
525 $ hg clone . ../addrm
526 updating to branch default
526 updating to branch default
527 getting changed largefiles
527 getting changed largefiles
528 3 largefiles updated, 0 removed
528 3 largefiles updated, 0 removed
529 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
529 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
530 $ cd ../addrm
530 $ cd ../addrm
531 $ cat >> .hg/hgrc <<EOF
531 $ cat >> .hg/hgrc <<EOF
532 > [hooks]
532 > [hooks]
533 > post-commit.stat=sh -c "echo \\"Invoking status postcommit hook\\"; hg status -A"
533 > post-commit.stat=sh -c "echo \\"Invoking status postcommit hook\\"; hg status -A"
534 > EOF
534 > EOF
535 $ touch foo
535 $ touch foo
536 $ hg add --large foo
536 $ hg add --large foo
537 $ hg ci -m "add foo"
537 $ hg ci -m "add foo"
538 Invoking status precommit hook
538 Invoking status precommit hook
539 A foo
539 A foo
540 Invoking status postcommit hook
540 Invoking status postcommit hook
541 C foo
541 C foo
542 C normal3
542 C normal3
543 C sub/large4
543 C sub/large4
544 C sub/normal4
544 C sub/normal4
545 C sub2/large6
545 C sub2/large6
546 C sub2/large7
546 C sub2/large7
547 $ rm foo
547 $ rm foo
548 $ hg st
548 $ hg st
549 ! foo
549 ! foo
550 hmm.. no precommit invoked, but there is a postcommit??
550 hmm.. no precommit invoked, but there is a postcommit??
551 $ hg ci -m "will not checkin"
551 $ hg ci -m "will not checkin"
552 nothing changed
552 nothing changed
553 Invoking status postcommit hook
553 Invoking status postcommit hook
554 ! foo
554 ! foo
555 C normal3
555 C normal3
556 C sub/large4
556 C sub/large4
557 C sub/normal4
557 C sub/normal4
558 C sub2/large6
558 C sub2/large6
559 C sub2/large7
559 C sub2/large7
560 [1]
560 [1]
561 $ hg addremove
561 $ hg addremove
562 removing foo
562 removing foo
563 $ hg st
563 $ hg st
564 R foo
564 R foo
565 $ hg ci -m "used to say nothing changed"
565 $ hg ci -m "used to say nothing changed"
566 Invoking status precommit hook
566 Invoking status precommit hook
567 R foo
567 R foo
568 Invoking status postcommit hook
568 Invoking status postcommit hook
569 C normal3
569 C normal3
570 C sub/large4
570 C sub/large4
571 C sub/normal4
571 C sub/normal4
572 C sub2/large6
572 C sub2/large6
573 C sub2/large7
573 C sub2/large7
574 $ hg st
574 $ hg st
575
575
576 Test 3507 (both normal files and largefiles were a problem)
576 Test 3507 (both normal files and largefiles were a problem)
577
577
578 $ touch normal
578 $ touch normal
579 $ touch large
579 $ touch large
580 $ hg add normal
580 $ hg add normal
581 $ hg add --large large
581 $ hg add --large large
582 $ hg ci -m "added"
582 $ hg ci -m "added"
583 Invoking status precommit hook
583 Invoking status precommit hook
584 A large
584 A large
585 A normal
585 A normal
586 Invoking status postcommit hook
586 Invoking status postcommit hook
587 C large
587 C large
588 C normal
588 C normal
589 C normal3
589 C normal3
590 C sub/large4
590 C sub/large4
591 C sub/normal4
591 C sub/normal4
592 C sub2/large6
592 C sub2/large6
593 C sub2/large7
593 C sub2/large7
594 $ hg remove normal
594 $ hg remove normal
595 $ hg addremove --traceback
595 $ hg addremove --traceback
596 $ hg ci -m "addremoved normal"
596 $ hg ci -m "addremoved normal"
597 Invoking status precommit hook
597 Invoking status precommit hook
598 R normal
598 R normal
599 Invoking status postcommit hook
599 Invoking status postcommit hook
600 C large
600 C large
601 C normal3
601 C normal3
602 C sub/large4
602 C sub/large4
603 C sub/normal4
603 C sub/normal4
604 C sub2/large6
604 C sub2/large6
605 C sub2/large7
605 C sub2/large7
606 $ hg up -C '.^'
606 $ hg up -C '.^'
607 getting changed largefiles
607 getting changed largefiles
608 0 largefiles updated, 0 removed
608 0 largefiles updated, 0 removed
609 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
609 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
610 $ hg remove large
610 $ hg remove large
611 $ hg addremove --traceback
611 $ hg addremove --traceback
612 $ hg ci -m "removed large"
612 $ hg ci -m "removed large"
613 Invoking status precommit hook
613 Invoking status precommit hook
614 R large
614 R large
615 created new head
615 created new head
616 Invoking status postcommit hook
616 Invoking status postcommit hook
617 C normal
617 C normal
618 C normal3
618 C normal3
619 C sub/large4
619 C sub/large4
620 C sub/normal4
620 C sub/normal4
621 C sub2/large6
621 C sub2/large6
622 C sub2/large7
622 C sub2/large7
623
623
624 Test commit -A (issue 3542)
624 Test commit -A (issue 3542)
625 $ echo large8 > large8
625 $ echo large8 > large8
626 $ hg add --large large8
626 $ hg add --large large8
627 $ hg ci -Am 'this used to add large8 as normal and commit both'
627 $ hg ci -Am 'this used to add large8 as normal and commit both'
628 Invoking status precommit hook
628 Invoking status precommit hook
629 A large8
629 A large8
630 Invoking status postcommit hook
630 Invoking status postcommit hook
631 C large8
631 C large8
632 C normal
632 C normal
633 C normal3
633 C normal3
634 C sub/large4
634 C sub/large4
635 C sub/normal4
635 C sub/normal4
636 C sub2/large6
636 C sub2/large6
637 C sub2/large7
637 C sub2/large7
638 $ rm large8
638 $ rm large8
639 $ hg ci -Am 'this used to not notice the rm'
639 $ hg ci -Am 'this used to not notice the rm'
640 removing large8
640 removing large8
641 Invoking status precommit hook
641 Invoking status precommit hook
642 R large8
642 R large8
643 Invoking status postcommit hook
643 Invoking status postcommit hook
644 C normal
644 C normal
645 C normal3
645 C normal3
646 C sub/large4
646 C sub/large4
647 C sub/normal4
647 C sub/normal4
648 C sub2/large6
648 C sub2/large6
649 C sub2/large7
649 C sub2/large7
650
650
651 Test that a standin can't be added as a large file
651 Test that a standin can't be added as a large file
652
652
653 $ touch large
653 $ touch large
654 $ hg add --large large
654 $ hg add --large large
655 $ hg ci -m "add"
655 $ hg ci -m "add"
656 Invoking status precommit hook
656 Invoking status precommit hook
657 A large
657 A large
658 Invoking status postcommit hook
658 Invoking status postcommit hook
659 C large
659 C large
660 C normal
660 C normal
661 C normal3
661 C normal3
662 C sub/large4
662 C sub/large4
663 C sub/normal4
663 C sub/normal4
664 C sub2/large6
664 C sub2/large6
665 C sub2/large7
665 C sub2/large7
666 $ hg remove large
666 $ hg remove large
667 $ touch large
667 $ touch large
668 $ hg addremove --config largefiles.patterns=**large --traceback
668 $ hg addremove --config largefiles.patterns=**large --traceback
669 adding large as a largefile
669 adding large as a largefile
670
670
671 Test that outgoing --large works (with revsets too)
671 Test that outgoing --large works (with revsets too)
672 $ hg outgoing --rev '.^' --large
672 $ hg outgoing --rev '.^' --large
673 comparing with $TESTTMP/a (glob)
673 comparing with $TESTTMP/a (glob)
674 searching for changes
674 searching for changes
675 changeset: 8:c02fd3b77ec4
675 changeset: 8:c02fd3b77ec4
676 user: test
676 user: test
677 date: Thu Jan 01 00:00:00 1970 +0000
677 date: Thu Jan 01 00:00:00 1970 +0000
678 summary: add foo
678 summary: add foo
679
679
680 changeset: 9:289dd08c9bbb
680 changeset: 9:289dd08c9bbb
681 user: test
681 user: test
682 date: Thu Jan 01 00:00:00 1970 +0000
682 date: Thu Jan 01 00:00:00 1970 +0000
683 summary: used to say nothing changed
683 summary: used to say nothing changed
684
684
685 changeset: 10:34f23ac6ac12
685 changeset: 10:34f23ac6ac12
686 user: test
686 user: test
687 date: Thu Jan 01 00:00:00 1970 +0000
687 date: Thu Jan 01 00:00:00 1970 +0000
688 summary: added
688 summary: added
689
689
690 changeset: 12:710c1b2f523c
690 changeset: 12:710c1b2f523c
691 parent: 10:34f23ac6ac12
691 parent: 10:34f23ac6ac12
692 user: test
692 user: test
693 date: Thu Jan 01 00:00:00 1970 +0000
693 date: Thu Jan 01 00:00:00 1970 +0000
694 summary: removed large
694 summary: removed large
695
695
696 changeset: 13:0a3e75774479
696 changeset: 13:0a3e75774479
697 user: test
697 user: test
698 date: Thu Jan 01 00:00:00 1970 +0000
698 date: Thu Jan 01 00:00:00 1970 +0000
699 summary: this used to add large8 as normal and commit both
699 summary: this used to add large8 as normal and commit both
700
700
701 changeset: 14:84f3d378175c
701 changeset: 14:84f3d378175c
702 user: test
702 user: test
703 date: Thu Jan 01 00:00:00 1970 +0000
703 date: Thu Jan 01 00:00:00 1970 +0000
704 summary: this used to not notice the rm
704 summary: this used to not notice the rm
705
705
706 searching for changes
706 searching for changes
707 largefiles to upload:
707 largefiles to upload:
708 foo
708 foo
709 large
709 large
710 large8
710 large8
711
711
712 $ cd ../a
712 $ cd ../a
713
713
714 Clone a largefiles repo.
714 Clone a largefiles repo.
715
715
716 $ hg clone . ../b
716 $ hg clone . ../b
717 updating to branch default
717 updating to branch default
718 getting changed largefiles
718 getting changed largefiles
719 3 largefiles updated, 0 removed
719 3 largefiles updated, 0 removed
720 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
720 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
721 $ cd ../b
721 $ cd ../b
722 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
722 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
723 7:daea875e9014 add/edit more largefiles
723 7:daea875e9014 add/edit more largefiles
724 6:4355d653f84f edit files yet again
724 6:4355d653f84f edit files yet again
725 5:9d5af5072dbd edit files again
725 5:9d5af5072dbd edit files again
726 4:74c02385b94c move files
726 4:74c02385b94c move files
727 3:9e8fbc4bce62 copy files
727 3:9e8fbc4bce62 copy files
728 2:51a0ae4d5864 remove files
728 2:51a0ae4d5864 remove files
729 1:ce8896473775 edit files
729 1:ce8896473775 edit files
730 0:30d30fe6a5be add files
730 0:30d30fe6a5be add files
731 $ cat normal3
731 $ cat normal3
732 normal33
732 normal33
733 $ cat sub/normal4
733 $ cat sub/normal4
734 normal44
734 normal44
735 $ cat sub/large4
735 $ cat sub/large4
736 large44
736 large44
737 $ cat sub2/large6
737 $ cat sub2/large6
738 large6
738 large6
739 $ cat sub2/large7
739 $ cat sub2/large7
740 large7
740 large7
741 $ cd ..
741 $ cd ..
742 $ hg clone a -r 3 c
742 $ hg clone a -r 3 c
743 adding changesets
743 adding changesets
744 adding manifests
744 adding manifests
745 adding file changes
745 adding file changes
746 added 4 changesets with 10 changes to 4 files
746 added 4 changesets with 10 changes to 4 files
747 updating to branch default
747 updating to branch default
748 getting changed largefiles
748 getting changed largefiles
749 2 largefiles updated, 0 removed
749 2 largefiles updated, 0 removed
750 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
750 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
751 $ cd c
751 $ cd c
752 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
752 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
753 3:9e8fbc4bce62 copy files
753 3:9e8fbc4bce62 copy files
754 2:51a0ae4d5864 remove files
754 2:51a0ae4d5864 remove files
755 1:ce8896473775 edit files
755 1:ce8896473775 edit files
756 0:30d30fe6a5be add files
756 0:30d30fe6a5be add files
757 $ cat normal1
757 $ cat normal1
758 normal22
758 normal22
759 $ cat large1
759 $ cat large1
760 large22
760 large22
761 $ cat sub/normal2
761 $ cat sub/normal2
762 normal22
762 normal22
763 $ cat sub/large2
763 $ cat sub/large2
764 large22
764 large22
765
765
766 Old revisions of a clone have correct largefiles content (this also
766 Old revisions of a clone have correct largefiles content (this also
767 tests update).
767 tests update).
768
768
769 $ hg update -r 1
769 $ hg update -r 1
770 getting changed largefiles
770 getting changed largefiles
771 1 largefiles updated, 0 removed
771 1 largefiles updated, 0 removed
772 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
772 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
773 $ cat large1
773 $ cat large1
774 large11
774 large11
775 $ cat sub/large2
775 $ cat sub/large2
776 large22
776 large22
777 $ cd ..
777 $ cd ..
778
778
779 Test cloning with --all-largefiles flag
779 Test cloning with --all-largefiles flag
780
780
781 $ rm "${USERCACHE}"/*
781 $ rm "${USERCACHE}"/*
782 $ hg clone --all-largefiles a a-backup
782 $ hg clone --all-largefiles a a-backup
783 updating to branch default
783 updating to branch default
784 getting changed largefiles
784 getting changed largefiles
785 3 largefiles updated, 0 removed
785 3 largefiles updated, 0 removed
786 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
786 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
787 8 additional largefiles cached
787 8 additional largefiles cached
788
788
789 $ rm "${USERCACHE}"/*
789 $ rm "${USERCACHE}"/*
790 $ hg clone --all-largefiles -u 0 a a-clone0
790 $ hg clone --all-largefiles -u 0 a a-clone0
791 updating to branch default
791 updating to branch default
792 getting changed largefiles
792 getting changed largefiles
793 2 largefiles updated, 0 removed
793 2 largefiles updated, 0 removed
794 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
794 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
795 9 additional largefiles cached
795 9 additional largefiles cached
796 $ hg -R a-clone0 sum
796 $ hg -R a-clone0 sum
797 parent: 0:30d30fe6a5be
797 parent: 0:30d30fe6a5be
798 add files
798 add files
799 branch: default
799 branch: default
800 commit: (clean)
800 commit: (clean)
801 update: 7 new changesets (update)
801 update: 7 new changesets (update)
802
802
803 $ rm "${USERCACHE}"/*
803 $ rm "${USERCACHE}"/*
804 $ hg clone --all-largefiles -u 1 a a-clone1
804 $ hg clone --all-largefiles -u 1 a a-clone1
805 updating to branch default
805 updating to branch default
806 getting changed largefiles
806 getting changed largefiles
807 2 largefiles updated, 0 removed
807 2 largefiles updated, 0 removed
808 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
808 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
809 8 additional largefiles cached
809 8 additional largefiles cached
810 $ hg -R a-clone1 sum
810 $ hg -R a-clone1 sum
811 parent: 1:ce8896473775
811 parent: 1:ce8896473775
812 edit files
812 edit files
813 branch: default
813 branch: default
814 commit: (clean)
814 commit: (clean)
815 update: 6 new changesets (update)
815 update: 6 new changesets (update)
816
816
817 $ rm "${USERCACHE}"/*
817 $ rm "${USERCACHE}"/*
818 $ hg clone --all-largefiles -U a a-clone-u
818 $ hg clone --all-largefiles -U a a-clone-u
819 11 additional largefiles cached
819 11 additional largefiles cached
820 $ hg -R a-clone-u sum
820 $ hg -R a-clone-u sum
821 parent: -1:000000000000 (no revision checked out)
821 parent: -1:000000000000 (no revision checked out)
822 branch: default
822 branch: default
823 commit: (clean)
823 commit: (clean)
824 update: 8 new changesets (update)
824 update: 8 new changesets (update)
825
825
826 $ mkdir xyz
826 $ mkdir xyz
827 $ cd xyz
827 $ cd xyz
828 $ hg clone ../a
828 $ hg clone ../a
829 destination directory: a
829 destination directory: a
830 updating to branch default
830 updating to branch default
831 getting changed largefiles
831 getting changed largefiles
832 3 largefiles updated, 0 removed
832 3 largefiles updated, 0 removed
833 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
833 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
834 $ cd ..
834 $ cd ..
835
835
836 Ensure base clone command argument validation
836 Ensure base clone command argument validation
837
837
838 $ hg clone -U -u 0 a a-clone-failure
838 $ hg clone -U -u 0 a a-clone-failure
839 abort: cannot specify both --noupdate and --updaterev
839 abort: cannot specify both --noupdate and --updaterev
840 [255]
840 [255]
841
841
842 $ hg clone --all-largefiles a ssh://localhost/a
842 $ hg clone --all-largefiles a ssh://localhost/a
843 abort: --all-largefiles is incompatible with non-local destination ssh://localhost/a
843 abort: --all-largefiles is incompatible with non-local destination ssh://localhost/a
844 [255]
844 [255]
845
845
846 Test pulling with --all-largefiles flag. Also test that the largefiles are
846 Test pulling with --all-largefiles flag. Also test that the largefiles are
847 downloaded from 'default' instead of 'default-push' when no source is specified
847 downloaded from 'default' instead of 'default-push' when no source is specified
848 (issue3584)
848 (issue3584)
849
849
850 $ rm -Rf a-backup
850 $ rm -Rf a-backup
851 $ hg clone -r 1 a a-backup
851 $ hg clone -r 1 a a-backup
852 adding changesets
852 adding changesets
853 adding manifests
853 adding manifests
854 adding file changes
854 adding file changes
855 added 2 changesets with 8 changes to 4 files
855 added 2 changesets with 8 changes to 4 files
856 updating to branch default
856 updating to branch default
857 getting changed largefiles
857 getting changed largefiles
858 2 largefiles updated, 0 removed
858 2 largefiles updated, 0 removed
859 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
859 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
860 $ rm "${USERCACHE}"/*
860 $ rm "${USERCACHE}"/*
861 $ cd a-backup
861 $ cd a-backup
862 $ hg pull --all-largefiles --config paths.default-push=bogus/path
862 $ hg pull --all-largefiles --config paths.default-push=bogus/path
863 pulling from $TESTTMP/a (glob)
863 pulling from $TESTTMP/a (glob)
864 searching for changes
864 searching for changes
865 adding changesets
865 adding changesets
866 adding manifests
866 adding manifests
867 adding file changes
867 adding file changes
868 added 6 changesets with 16 changes to 8 files
868 added 6 changesets with 16 changes to 8 files
869 (run 'hg update' to get a working copy)
869 (run 'hg update' to get a working copy)
870 caching new largefiles
870 caching new largefiles
871 3 largefiles cached
871 3 largefiles cached
872 3 additional largefiles cached
872 3 additional largefiles cached
873 $ cd ..
873 $ cd ..
874
874
875 Rebasing between two repositories does not revert largefiles to old
875 Rebasing between two repositories does not revert largefiles to old
876 revisions (this was a very bad bug that took a lot of work to fix).
876 revisions (this was a very bad bug that took a lot of work to fix).
877
877
878 $ hg clone a d
878 $ hg clone a d
879 updating to branch default
879 updating to branch default
880 getting changed largefiles
880 getting changed largefiles
881 3 largefiles updated, 0 removed
881 3 largefiles updated, 0 removed
882 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
882 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
883 $ cd b
883 $ cd b
884 $ echo large4-modified > sub/large4
884 $ echo large4-modified > sub/large4
885 $ echo normal3-modified > normal3
885 $ echo normal3-modified > normal3
886 $ hg commit -m "modify normal file and largefile in repo b"
886 $ hg commit -m "modify normal file and largefile in repo b"
887 Invoking status precommit hook
887 Invoking status precommit hook
888 M normal3
888 M normal3
889 M sub/large4
889 M sub/large4
890 $ cd ../d
890 $ cd ../d
891 $ echo large6-modified > sub2/large6
891 $ echo large6-modified > sub2/large6
892 $ echo normal4-modified > sub/normal4
892 $ echo normal4-modified > sub/normal4
893 $ hg commit -m "modify normal file largefile in repo d"
893 $ hg commit -m "modify normal file largefile in repo d"
894 Invoking status precommit hook
894 Invoking status precommit hook
895 M sub/normal4
895 M sub/normal4
896 M sub2/large6
896 M sub2/large6
897 $ cd ..
897 $ cd ..
898 $ hg clone d e
898 $ hg clone d e
899 updating to branch default
899 updating to branch default
900 getting changed largefiles
900 getting changed largefiles
901 3 largefiles updated, 0 removed
901 3 largefiles updated, 0 removed
902 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
902 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
903 $ cd d
903 $ cd d
904
904
905 More rebase testing, but also test that the largefiles are downloaded from
905 More rebase testing, but also test that the largefiles are downloaded from
906 'default' instead of 'default-push' when no source is specified (issue3584).
906 'default' instead of 'default-push' when no source is specified (issue3584).
907 The error messages go away if repo 'b' is created with --all-largefiles.
907 The error messages go away if repo 'b' is created with --all-largefiles.
908 $ hg pull --rebase --all-largefiles --config paths.default-push=bogus/path --config paths.default=../b
908 $ hg pull --rebase --all-largefiles --config paths.default-push=bogus/path --config paths.default=../b
909 pulling from $TESTTMP/b (glob)
909 pulling from $TESTTMP/b (glob)
910 searching for changes
910 searching for changes
911 adding changesets
911 adding changesets
912 adding manifests
912 adding manifests
913 adding file changes
913 adding file changes
914 added 1 changesets with 2 changes to 2 files (+1 heads)
914 added 1 changesets with 2 changes to 2 files (+1 heads)
915 Invoking status precommit hook
915 Invoking status precommit hook
916 M sub/normal4
916 M sub/normal4
917 M sub2/large6
917 M sub2/large6
918 saved backup bundle to $TESTTMP/d/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
918 saved backup bundle to $TESTTMP/d/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
919 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large3: can't get file locally (glob)
919 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large3: can't get file locally (glob)
920 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large4: can't get file locally (glob)
920 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large4: can't get file locally (glob)
921 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
921 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
922 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
922 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
923 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
923 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
924 error getting id 5f78770c0e77ba4287ad6ef3071c9bf9c379742f from url file:$TESTTMP/b for file large1: can't get file locally (glob)
924 error getting id 5f78770c0e77ba4287ad6ef3071c9bf9c379742f from url file:$TESTTMP/b for file large1: can't get file locally (glob)
925 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
925 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
926 error getting id 4669e532d5b2c093a78eca010077e708a071bb64 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
926 error getting id 4669e532d5b2c093a78eca010077e708a071bb64 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
927 error getting id 1deebade43c8c498a3c8daddac0244dc55d1331d from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
927 error getting id 1deebade43c8c498a3c8daddac0244dc55d1331d from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
928 0 additional largefiles cached
928 0 additional largefiles cached
929 9 largefiles failed to download
929 9 largefiles failed to download
930 nothing to rebase
930 nothing to rebase
931 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
931 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
932 9:598410d3eb9a modify normal file largefile in repo d
932 9:598410d3eb9a modify normal file largefile in repo d
933 8:a381d2c8c80e modify normal file and largefile in repo b
933 8:a381d2c8c80e modify normal file and largefile in repo b
934 7:daea875e9014 add/edit more largefiles
934 7:daea875e9014 add/edit more largefiles
935 6:4355d653f84f edit files yet again
935 6:4355d653f84f edit files yet again
936 5:9d5af5072dbd edit files again
936 5:9d5af5072dbd edit files again
937 4:74c02385b94c move files
937 4:74c02385b94c move files
938 3:9e8fbc4bce62 copy files
938 3:9e8fbc4bce62 copy files
939 2:51a0ae4d5864 remove files
939 2:51a0ae4d5864 remove files
940 1:ce8896473775 edit files
940 1:ce8896473775 edit files
941 0:30d30fe6a5be add files
941 0:30d30fe6a5be add files
942 $ cat normal3
942 $ cat normal3
943 normal3-modified
943 normal3-modified
944 $ cat sub/normal4
944 $ cat sub/normal4
945 normal4-modified
945 normal4-modified
946 $ cat sub/large4
946 $ cat sub/large4
947 large4-modified
947 large4-modified
948 $ cat sub2/large6
948 $ cat sub2/large6
949 large6-modified
949 large6-modified
950 $ cat sub2/large7
950 $ cat sub2/large7
951 large7
951 large7
952 $ cd ../e
952 $ cd ../e
953 $ hg pull ../b
953 $ hg pull ../b
954 pulling from ../b
954 pulling from ../b
955 searching for changes
955 searching for changes
956 adding changesets
956 adding changesets
957 adding manifests
957 adding manifests
958 adding file changes
958 adding file changes
959 added 1 changesets with 2 changes to 2 files (+1 heads)
959 added 1 changesets with 2 changes to 2 files (+1 heads)
960 (run 'hg heads' to see heads, 'hg merge' to merge)
960 (run 'hg heads' to see heads, 'hg merge' to merge)
961 caching new largefiles
961 caching new largefiles
962 0 largefiles cached
962 0 largefiles cached
963 $ hg rebase
963 $ hg rebase
964 Invoking status precommit hook
964 Invoking status precommit hook
965 M sub/normal4
965 M sub/normal4
966 M sub2/large6
966 M sub2/large6
967 saved backup bundle to $TESTTMP/e/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
967 saved backup bundle to $TESTTMP/e/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
968 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
968 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
969 9:598410d3eb9a modify normal file largefile in repo d
969 9:598410d3eb9a modify normal file largefile in repo d
970 8:a381d2c8c80e modify normal file and largefile in repo b
970 8:a381d2c8c80e modify normal file and largefile in repo b
971 7:daea875e9014 add/edit more largefiles
971 7:daea875e9014 add/edit more largefiles
972 6:4355d653f84f edit files yet again
972 6:4355d653f84f edit files yet again
973 5:9d5af5072dbd edit files again
973 5:9d5af5072dbd edit files again
974 4:74c02385b94c move files
974 4:74c02385b94c move files
975 3:9e8fbc4bce62 copy files
975 3:9e8fbc4bce62 copy files
976 2:51a0ae4d5864 remove files
976 2:51a0ae4d5864 remove files
977 1:ce8896473775 edit files
977 1:ce8896473775 edit files
978 0:30d30fe6a5be add files
978 0:30d30fe6a5be add files
979 $ cat normal3
979 $ cat normal3
980 normal3-modified
980 normal3-modified
981 $ cat sub/normal4
981 $ cat sub/normal4
982 normal4-modified
982 normal4-modified
983 $ cat sub/large4
983 $ cat sub/large4
984 large4-modified
984 large4-modified
985 $ cat sub2/large6
985 $ cat sub2/large6
986 large6-modified
986 large6-modified
987 $ cat sub2/large7
987 $ cat sub2/large7
988 large7
988 large7
989
989
990 Log on largefiles
990 Log on largefiles
991
991
992 - same output
992 - same output
993 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub/large4
993 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub/large4
994 8:a381d2c8c80e modify normal file and largefile in repo b
994 8:a381d2c8c80e modify normal file and largefile in repo b
995 6:4355d653f84f edit files yet again
995 6:4355d653f84f edit files yet again
996 5:9d5af5072dbd edit files again
996 5:9d5af5072dbd edit files again
997 4:74c02385b94c move files
997 4:74c02385b94c move files
998 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub/large4
998 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub/large4
999 8:a381d2c8c80e modify normal file and largefile in repo b
999 8:a381d2c8c80e modify normal file and largefile in repo b
1000 6:4355d653f84f edit files yet again
1000 6:4355d653f84f edit files yet again
1001 5:9d5af5072dbd edit files again
1001 5:9d5af5072dbd edit files again
1002 4:74c02385b94c move files
1002 4:74c02385b94c move files
1003
1003
1004 - .hglf only matches largefiles, without .hglf it matches 9 bco sub/normal
1004 - .hglf only matches largefiles, without .hglf it matches 9 bco sub/normal
1005 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub
1005 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub
1006 8:a381d2c8c80e modify normal file and largefile in repo b
1006 8:a381d2c8c80e modify normal file and largefile in repo b
1007 6:4355d653f84f edit files yet again
1007 6:4355d653f84f edit files yet again
1008 5:9d5af5072dbd edit files again
1008 5:9d5af5072dbd edit files again
1009 4:74c02385b94c move files
1009 4:74c02385b94c move files
1010 1:ce8896473775 edit files
1010 1:ce8896473775 edit files
1011 0:30d30fe6a5be add files
1011 0:30d30fe6a5be add files
1012 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub
1012 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub
1013 9:598410d3eb9a modify normal file largefile in repo d
1013 9:598410d3eb9a modify normal file largefile in repo d
1014 8:a381d2c8c80e modify normal file and largefile in repo b
1014 8:a381d2c8c80e modify normal file and largefile in repo b
1015 6:4355d653f84f edit files yet again
1015 6:4355d653f84f edit files yet again
1016 5:9d5af5072dbd edit files again
1016 5:9d5af5072dbd edit files again
1017 4:74c02385b94c move files
1017 4:74c02385b94c move files
1018 1:ce8896473775 edit files
1018 1:ce8896473775 edit files
1019 0:30d30fe6a5be add files
1019 0:30d30fe6a5be add files
1020
1020
1021 - globbing gives same result
1021 - globbing gives same result
1022 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' 'glob:sub/*'
1022 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' 'glob:sub/*'
1023 9:598410d3eb9a modify normal file largefile in repo d
1023 9:598410d3eb9a modify normal file largefile in repo d
1024 8:a381d2c8c80e modify normal file and largefile in repo b
1024 8:a381d2c8c80e modify normal file and largefile in repo b
1025 6:4355d653f84f edit files yet again
1025 6:4355d653f84f edit files yet again
1026 5:9d5af5072dbd edit files again
1026 5:9d5af5072dbd edit files again
1027 4:74c02385b94c move files
1027 4:74c02385b94c move files
1028 1:ce8896473775 edit files
1028 1:ce8896473775 edit files
1029 0:30d30fe6a5be add files
1029 0:30d30fe6a5be add files
1030
1030
1031 Rollback on largefiles.
1031 Rollback on largefiles.
1032
1032
1033 $ echo large4-modified-again > sub/large4
1033 $ echo large4-modified-again > sub/large4
1034 $ hg commit -m "Modify large4 again"
1034 $ hg commit -m "Modify large4 again"
1035 Invoking status precommit hook
1035 Invoking status precommit hook
1036 M sub/large4
1036 M sub/large4
1037 $ hg rollback
1037 $ hg rollback
1038 repository tip rolled back to revision 9 (undo commit)
1038 repository tip rolled back to revision 9 (undo commit)
1039 working directory now based on revision 9
1039 working directory now based on revision 9
1040 $ hg st
1040 $ hg st
1041 M sub/large4
1041 M sub/large4
1042 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1042 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1043 9:598410d3eb9a modify normal file largefile in repo d
1043 9:598410d3eb9a modify normal file largefile in repo d
1044 8:a381d2c8c80e modify normal file and largefile in repo b
1044 8:a381d2c8c80e modify normal file and largefile in repo b
1045 7:daea875e9014 add/edit more largefiles
1045 7:daea875e9014 add/edit more largefiles
1046 6:4355d653f84f edit files yet again
1046 6:4355d653f84f edit files yet again
1047 5:9d5af5072dbd edit files again
1047 5:9d5af5072dbd edit files again
1048 4:74c02385b94c move files
1048 4:74c02385b94c move files
1049 3:9e8fbc4bce62 copy files
1049 3:9e8fbc4bce62 copy files
1050 2:51a0ae4d5864 remove files
1050 2:51a0ae4d5864 remove files
1051 1:ce8896473775 edit files
1051 1:ce8896473775 edit files
1052 0:30d30fe6a5be add files
1052 0:30d30fe6a5be add files
1053 $ cat sub/large4
1053 $ cat sub/large4
1054 large4-modified-again
1054 large4-modified-again
1055
1055
1056 "update --check" refuses to update with uncommitted changes.
1056 "update --check" refuses to update with uncommitted changes.
1057 $ hg update --check 8
1057 $ hg update --check 8
1058 abort: uncommitted local changes
1058 abort: uncommitted local changes
1059 [255]
1059 [255]
1060
1060
1061 "update --clean" leaves correct largefiles in working copy, even when there is
1061 "update --clean" leaves correct largefiles in working copy, even when there is
1062 .orig files from revert in .hglf.
1062 .orig files from revert in .hglf.
1063
1063
1064 $ echo mistake > sub2/large7
1064 $ echo mistake > sub2/large7
1065 $ hg revert sub2/large7
1065 $ hg revert sub2/large7
1066 $ hg -q update --clean -r null
1066 $ hg -q update --clean -r null
1067 $ hg update --clean
1067 $ hg update --clean
1068 getting changed largefiles
1068 getting changed largefiles
1069 3 largefiles updated, 0 removed
1069 3 largefiles updated, 0 removed
1070 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1070 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1071 $ cat normal3
1071 $ cat normal3
1072 normal3-modified
1072 normal3-modified
1073 $ cat sub/normal4
1073 $ cat sub/normal4
1074 normal4-modified
1074 normal4-modified
1075 $ cat sub/large4
1075 $ cat sub/large4
1076 large4-modified
1076 large4-modified
1077 $ cat sub2/large6
1077 $ cat sub2/large6
1078 large6-modified
1078 large6-modified
1079 $ cat sub2/large7
1079 $ cat sub2/large7
1080 large7
1080 large7
1081 $ cat sub2/large7.orig
1081 $ cat sub2/large7.orig
1082 mistake
1082 mistake
1083 $ cat .hglf/sub2/large7.orig
1083 $ cat .hglf/sub2/large7.orig
1084 9dbfb2c79b1c40981b258c3efa1b10b03f18ad31
1084 9dbfb2c79b1c40981b258c3efa1b10b03f18ad31
1085
1085
1086 demonstrate misfeature: .orig file is overwritten on every update -C,
1086 demonstrate misfeature: .orig file is overwritten on every update -C,
1087 also when clean:
1087 also when clean:
1088 $ hg update --clean
1088 $ hg update --clean
1089 getting changed largefiles
1089 getting changed largefiles
1090 0 largefiles updated, 0 removed
1090 0 largefiles updated, 0 removed
1091 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1091 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1092 $ cat sub2/large7.orig
1092 $ cat sub2/large7.orig
1093 large7
1093 large7
1094 $ rm sub2/large7.orig .hglf/sub2/large7.orig
1094 $ rm sub2/large7.orig .hglf/sub2/large7.orig
1095
1095
1096 Now "update check" is happy.
1096 Now "update check" is happy.
1097 $ hg update --check 8
1097 $ hg update --check 8
1098 getting changed largefiles
1098 getting changed largefiles
1099 1 largefiles updated, 0 removed
1099 1 largefiles updated, 0 removed
1100 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1100 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1101 $ hg update --check
1101 $ hg update --check
1102 getting changed largefiles
1102 getting changed largefiles
1103 1 largefiles updated, 0 removed
1103 1 largefiles updated, 0 removed
1104 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1104 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1105
1105
1106 Test removing empty largefiles directories on update
1106 Test removing empty largefiles directories on update
1107 $ test -d sub2 && echo "sub2 exists"
1107 $ test -d sub2 && echo "sub2 exists"
1108 sub2 exists
1108 sub2 exists
1109 $ hg update -q null
1109 $ hg update -q null
1110 $ test -d sub2 && echo "error: sub2 should not exist anymore"
1110 $ test -d sub2 && echo "error: sub2 should not exist anymore"
1111 [1]
1111 [1]
1112 $ hg update -q
1112 $ hg update -q
1113
1113
1114 Test hg remove removes empty largefiles directories
1114 Test hg remove removes empty largefiles directories
1115 $ test -d sub2 && echo "sub2 exists"
1115 $ test -d sub2 && echo "sub2 exists"
1116 sub2 exists
1116 sub2 exists
1117 $ hg remove sub2/*
1117 $ hg remove sub2/*
1118 $ test -d sub2 && echo "error: sub2 should not exist anymore"
1118 $ test -d sub2 && echo "error: sub2 should not exist anymore"
1119 [1]
1119 [1]
1120 $ hg revert sub2/large6 sub2/large7
1120 $ hg revert sub2/large6 sub2/large7
1121
1121
1122 "revert" works on largefiles (and normal files too).
1122 "revert" works on largefiles (and normal files too).
1123 $ echo hack3 >> normal3
1123 $ echo hack3 >> normal3
1124 $ echo hack4 >> sub/normal4
1124 $ echo hack4 >> sub/normal4
1125 $ echo hack4 >> sub/large4
1125 $ echo hack4 >> sub/large4
1126 $ rm sub2/large6
1126 $ rm sub2/large6
1127 $ hg revert sub2/large6
1127 $ hg revert sub2/large6
1128 $ hg rm sub2/large6
1128 $ hg rm sub2/large6
1129 $ echo new >> sub2/large8
1129 $ echo new >> sub2/large8
1130 $ hg add --large sub2/large8
1130 $ hg add --large sub2/large8
1131 # XXX we don't really want to report that we're reverting the standin;
1131 # XXX we don't really want to report that we're reverting the standin;
1132 # that's just an implementation detail. But I don't see an obvious fix. ;-(
1132 # that's just an implementation detail. But I don't see an obvious fix. ;-(
1133 $ hg revert sub
1133 $ hg revert sub
1134 reverting .hglf/sub/large4 (glob)
1134 reverting .hglf/sub/large4 (glob)
1135 reverting sub/normal4 (glob)
1135 reverting sub/normal4 (glob)
1136 $ hg status
1136 $ hg status
1137 M normal3
1137 M normal3
1138 A sub2/large8
1138 A sub2/large8
1139 R sub2/large6
1139 R sub2/large6
1140 ? sub/large4.orig
1140 ? sub/large4.orig
1141 ? sub/normal4.orig
1141 ? sub/normal4.orig
1142 $ cat sub/normal4
1142 $ cat sub/normal4
1143 normal4-modified
1143 normal4-modified
1144 $ cat sub/large4
1144 $ cat sub/large4
1145 large4-modified
1145 large4-modified
1146 $ hg revert -a --no-backup
1146 $ hg revert -a --no-backup
1147 undeleting .hglf/sub2/large6 (glob)
1147 undeleting .hglf/sub2/large6 (glob)
1148 forgetting .hglf/sub2/large8 (glob)
1148 forgetting .hglf/sub2/large8 (glob)
1149 reverting normal3
1149 reverting normal3
1150 $ hg status
1150 $ hg status
1151 ? sub/large4.orig
1151 ? sub/large4.orig
1152 ? sub/normal4.orig
1152 ? sub/normal4.orig
1153 ? sub2/large8
1153 ? sub2/large8
1154 $ cat normal3
1154 $ cat normal3
1155 normal3-modified
1155 normal3-modified
1156 $ cat sub2/large6
1156 $ cat sub2/large6
1157 large6-modified
1157 large6-modified
1158 $ rm sub/*.orig sub2/large8
1158 $ rm sub/*.orig sub2/large8
1159
1159
1160 revert some files to an older revision
1160 revert some files to an older revision
1161 $ hg revert --no-backup -r 8 sub2
1161 $ hg revert --no-backup -r 8 sub2
1162 reverting .hglf/sub2/large6 (glob)
1162 reverting .hglf/sub2/large6 (glob)
1163 $ cat sub2/large6
1163 $ cat sub2/large6
1164 large6
1164 large6
1165 $ hg revert --no-backup -C -r '.^' sub2
1165 $ hg revert --no-backup -C -r '.^' sub2
1166 reverting .hglf/sub2/large6 (glob)
1166 reverting .hglf/sub2/large6 (glob)
1167 $ hg revert --no-backup sub2
1167 $ hg revert --no-backup sub2
1168 reverting .hglf/sub2/large6 (glob)
1168 reverting .hglf/sub2/large6 (glob)
1169 $ hg status
1169 $ hg status
1170
1170
1171 "verify --large" actually verifies largefiles
1171 "verify --large" actually verifies largefiles
1172
1172
1173 $ hg verify --large
1173 $ hg verify --large
1174 checking changesets
1174 checking changesets
1175 checking manifests
1175 checking manifests
1176 crosschecking files in changesets and manifests
1176 crosschecking files in changesets and manifests
1177 checking files
1177 checking files
1178 10 files, 10 changesets, 28 total revisions
1178 10 files, 10 changesets, 28 total revisions
1179 searching 1 changesets for largefiles
1179 searching 1 changesets for largefiles
1180 verified existence of 3 revisions of 3 largefiles
1180 verified existence of 3 revisions of 3 largefiles
1181
1181
1182 Merging does not revert to old versions of largefiles and also check
1182 Merging does not revert to old versions of largefiles and also check
1183 that merging after having pulled from a non-default remote works
1183 that merging after having pulled from a non-default remote works
1184 correctly.
1184 correctly.
1185
1185
1186 $ cd ..
1186 $ cd ..
1187 $ hg clone -r 7 e temp
1187 $ hg clone -r 7 e temp
1188 adding changesets
1188 adding changesets
1189 adding manifests
1189 adding manifests
1190 adding file changes
1190 adding file changes
1191 added 8 changesets with 24 changes to 10 files
1191 added 8 changesets with 24 changes to 10 files
1192 updating to branch default
1192 updating to branch default
1193 getting changed largefiles
1193 getting changed largefiles
1194 3 largefiles updated, 0 removed
1194 3 largefiles updated, 0 removed
1195 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1195 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1196 $ hg clone temp f
1196 $ hg clone temp f
1197 updating to branch default
1197 updating to branch default
1198 getting changed largefiles
1198 getting changed largefiles
1199 3 largefiles updated, 0 removed
1199 3 largefiles updated, 0 removed
1200 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1200 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1201 # Delete the largefiles in the largefiles system cache so that we have an
1201 # Delete the largefiles in the largefiles system cache so that we have an
1202 # opportunity to test that caching after a pull works.
1202 # opportunity to test that caching after a pull works.
1203 $ rm "${USERCACHE}"/*
1203 $ rm "${USERCACHE}"/*
1204 $ cd f
1204 $ cd f
1205 $ echo "large4-merge-test" > sub/large4
1205 $ echo "large4-merge-test" > sub/large4
1206 $ hg commit -m "Modify large4 to test merge"
1206 $ hg commit -m "Modify large4 to test merge"
1207 Invoking status precommit hook
1207 Invoking status precommit hook
1208 M sub/large4
1208 M sub/large4
1209 $ hg pull ../e
1209 $ hg pull ../e
1210 pulling from ../e
1210 pulling from ../e
1211 searching for changes
1211 searching for changes
1212 adding changesets
1212 adding changesets
1213 adding manifests
1213 adding manifests
1214 adding file changes
1214 adding file changes
1215 added 2 changesets with 4 changes to 4 files (+1 heads)
1215 added 2 changesets with 4 changes to 4 files (+1 heads)
1216 (run 'hg heads' to see heads, 'hg merge' to merge)
1216 (run 'hg heads' to see heads, 'hg merge' to merge)
1217 caching new largefiles
1217 caching new largefiles
1218 2 largefiles cached
1218 2 largefiles cached
1219 $ hg merge
1219 $ hg merge
1220 merging sub/large4
1220 merging sub/large4
1221 largefile sub/large4 has a merge conflict
1221 largefile sub/large4 has a merge conflict
1222 keep (l)ocal or take (o)ther? l
1222 keep (l)ocal or take (o)ther? l
1223 3 files updated, 1 files merged, 0 files removed, 0 files unresolved
1223 3 files updated, 1 files merged, 0 files removed, 0 files unresolved
1224 (branch merge, don't forget to commit)
1224 (branch merge, don't forget to commit)
1225 getting changed largefiles
1225 getting changed largefiles
1226 1 largefiles updated, 0 removed
1226 1 largefiles updated, 0 removed
1227 $ hg commit -m "Merge repos e and f"
1227 $ hg commit -m "Merge repos e and f"
1228 Invoking status precommit hook
1228 Invoking status precommit hook
1229 M normal3
1229 M normal3
1230 M sub/normal4
1230 M sub/normal4
1231 M sub2/large6
1231 M sub2/large6
1232 $ cat normal3
1232 $ cat normal3
1233 normal3-modified
1233 normal3-modified
1234 $ cat sub/normal4
1234 $ cat sub/normal4
1235 normal4-modified
1235 normal4-modified
1236 $ cat sub/large4
1236 $ cat sub/large4
1237 large4-merge-test
1237 large4-merge-test
1238 $ cat sub2/large6
1238 $ cat sub2/large6
1239 large6-modified
1239 large6-modified
1240 $ cat sub2/large7
1240 $ cat sub2/large7
1241 large7
1241 large7
1242
1242
1243 Test status after merging with a branch that introduces a new largefile:
1243 Test status after merging with a branch that introduces a new largefile:
1244
1244
1245 $ echo large > large
1245 $ echo large > large
1246 $ hg add --large large
1246 $ hg add --large large
1247 $ hg commit -m 'add largefile'
1247 $ hg commit -m 'add largefile'
1248 Invoking status precommit hook
1248 Invoking status precommit hook
1249 A large
1249 A large
1250 $ hg update -q ".^"
1250 $ hg update -q ".^"
1251 $ echo change >> normal3
1251 $ echo change >> normal3
1252 $ hg commit -m 'some change'
1252 $ hg commit -m 'some change'
1253 Invoking status precommit hook
1253 Invoking status precommit hook
1254 M normal3
1254 M normal3
1255 created new head
1255 created new head
1256 $ hg merge
1256 $ hg merge
1257 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1257 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1258 (branch merge, don't forget to commit)
1258 (branch merge, don't forget to commit)
1259 getting changed largefiles
1259 getting changed largefiles
1260 1 largefiles updated, 0 removed
1260 1 largefiles updated, 0 removed
1261 $ hg status
1261 $ hg status
1262 M large
1262 M large
1263
1263
1264 - make sure update of merge with removed largefiles fails as expected
1264 - make sure update of merge with removed largefiles fails as expected
1265 $ hg rm sub2/large6
1265 $ hg rm sub2/large6
1266 $ hg up -r.
1266 $ hg up -r.
1267 abort: outstanding uncommitted merges
1267 abort: outstanding uncommitted merges
1268 [255]
1268 [255]
1269
1269
1270 - revert should be able to revert files introduced in a pending merge
1270 - revert should be able to revert files introduced in a pending merge
1271 $ hg revert --all -r .
1271 $ hg revert --all -r .
1272 removing .hglf/large
1272 removing .hglf/large
1273 undeleting .hglf/sub2/large6
1273 undeleting .hglf/sub2/large6
1274
1274
1275 Test that a normal file and a largefile with the same name and path cannot
1275 Test that a normal file and a largefile with the same name and path cannot
1276 coexist.
1276 coexist.
1277
1277
1278 $ rm sub2/large7
1278 $ rm sub2/large7
1279 $ echo "largeasnormal" > sub2/large7
1279 $ echo "largeasnormal" > sub2/large7
1280 $ hg add sub2/large7
1280 $ hg add sub2/large7
1281 sub2/large7 already a largefile
1281 sub2/large7 already a largefile
1282
1282
1283 Test that transplanting a largefile change works correctly.
1283 Test that transplanting a largefile change works correctly.
1284
1284
1285 $ cd ..
1285 $ cd ..
1286 $ hg clone -r 8 d g
1286 $ hg clone -r 8 d g
1287 adding changesets
1287 adding changesets
1288 adding manifests
1288 adding manifests
1289 adding file changes
1289 adding file changes
1290 added 9 changesets with 26 changes to 10 files
1290 added 9 changesets with 26 changes to 10 files
1291 updating to branch default
1291 updating to branch default
1292 getting changed largefiles
1292 getting changed largefiles
1293 3 largefiles updated, 0 removed
1293 3 largefiles updated, 0 removed
1294 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1294 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1295 $ cd g
1295 $ cd g
1296 $ hg transplant -s ../d 598410d3eb9a
1296 $ hg transplant -s ../d 598410d3eb9a
1297 searching for changes
1297 searching for changes
1298 searching for changes
1298 searching for changes
1299 adding changesets
1299 adding changesets
1300 adding manifests
1300 adding manifests
1301 adding file changes
1301 adding file changes
1302 added 1 changesets with 2 changes to 2 files
1302 added 1 changesets with 2 changes to 2 files
1303 getting changed largefiles
1303 getting changed largefiles
1304 1 largefiles updated, 0 removed
1304 1 largefiles updated, 0 removed
1305 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1305 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1306 9:598410d3eb9a modify normal file largefile in repo d
1306 9:598410d3eb9a modify normal file largefile in repo d
1307 8:a381d2c8c80e modify normal file and largefile in repo b
1307 8:a381d2c8c80e modify normal file and largefile in repo b
1308 7:daea875e9014 add/edit more largefiles
1308 7:daea875e9014 add/edit more largefiles
1309 6:4355d653f84f edit files yet again
1309 6:4355d653f84f edit files yet again
1310 5:9d5af5072dbd edit files again
1310 5:9d5af5072dbd edit files again
1311 4:74c02385b94c move files
1311 4:74c02385b94c move files
1312 3:9e8fbc4bce62 copy files
1312 3:9e8fbc4bce62 copy files
1313 2:51a0ae4d5864 remove files
1313 2:51a0ae4d5864 remove files
1314 1:ce8896473775 edit files
1314 1:ce8896473775 edit files
1315 0:30d30fe6a5be add files
1315 0:30d30fe6a5be add files
1316 $ cat normal3
1316 $ cat normal3
1317 normal3-modified
1317 normal3-modified
1318 $ cat sub/normal4
1318 $ cat sub/normal4
1319 normal4-modified
1319 normal4-modified
1320 $ cat sub/large4
1320 $ cat sub/large4
1321 large4-modified
1321 large4-modified
1322 $ cat sub2/large6
1322 $ cat sub2/large6
1323 large6-modified
1323 large6-modified
1324 $ cat sub2/large7
1324 $ cat sub2/large7
1325 large7
1325 large7
1326
1326
1327 Cat a largefile
1327 Cat a largefile
1328 $ hg cat normal3
1328 $ hg cat normal3
1329 normal3-modified
1329 normal3-modified
1330 $ hg cat sub/large4
1330 $ hg cat sub/large4
1331 large4-modified
1331 large4-modified
1332 $ rm "${USERCACHE}"/*
1332 $ rm "${USERCACHE}"/*
1333 $ hg cat -r a381d2c8c80e -o cat.out sub/large4
1333 $ hg cat -r a381d2c8c80e -o cat.out sub/large4
1334 $ cat cat.out
1334 $ cat cat.out
1335 large4-modified
1335 large4-modified
1336 $ rm cat.out
1336 $ rm cat.out
1337 $ hg cat -r a381d2c8c80e normal3
1337 $ hg cat -r a381d2c8c80e normal3
1338 normal3-modified
1338 normal3-modified
1339 $ hg cat -r '.^' normal3
1339 $ hg cat -r '.^' normal3
1340 normal3-modified
1340 normal3-modified
1341 $ hg cat -r '.^' sub/large4
1341 $ hg cat -r '.^' sub/large4
1342 large4-modified
1342 large4-modified
1343
1343
1344 Test that renaming a largefile results in correct output for status
1344 Test that renaming a largefile results in correct output for status
1345
1345
1346 $ hg rename sub/large4 large4-renamed
1346 $ hg rename sub/large4 large4-renamed
1347 $ hg commit -m "test rename output"
1347 $ hg commit -m "test rename output"
1348 Invoking status precommit hook
1348 Invoking status precommit hook
1349 A large4-renamed
1349 A large4-renamed
1350 R sub/large4
1350 R sub/large4
1351 $ cat large4-renamed
1351 $ cat large4-renamed
1352 large4-modified
1352 large4-modified
1353 $ cd sub2
1353 $ cd sub2
1354 $ hg rename large6 large6-renamed
1354 $ hg rename large6 large6-renamed
1355 $ hg st
1355 $ hg st
1356 A sub2/large6-renamed
1356 A sub2/large6-renamed
1357 R sub2/large6
1357 R sub2/large6
1358 $ cd ..
1358 $ cd ..
1359
1359
1360 Test --normal flag
1360 Test --normal flag
1361
1361
1362 $ dd if=/dev/zero bs=2k count=11k > new-largefile 2> /dev/null
1362 $ dd if=/dev/zero bs=2k count=11k > new-largefile 2> /dev/null
1363 $ hg add --normal --large new-largefile
1363 $ hg add --normal --large new-largefile
1364 abort: --normal cannot be used with --large
1364 abort: --normal cannot be used with --large
1365 [255]
1365 [255]
1366 $ hg add --normal new-largefile
1366 $ hg add --normal new-largefile
1367 new-largefile: up to 69 MB of RAM may be required to manage this file
1367 new-largefile: up to 69 MB of RAM may be required to manage this file
1368 (use 'hg revert new-largefile' to cancel the pending addition)
1368 (use 'hg revert new-largefile' to cancel the pending addition)
1369 $ cd ..
1369 $ cd ..
1370
1370
1371 #if serve
1371 #if serve
1372 vanilla clients not locked out from largefiles servers on vanilla repos
1372 vanilla clients not locked out from largefiles servers on vanilla repos
1373 $ mkdir r1
1373 $ mkdir r1
1374 $ cd r1
1374 $ cd r1
1375 $ hg init
1375 $ hg init
1376 $ echo c1 > f1
1376 $ echo c1 > f1
1377 $ hg add f1
1377 $ hg add f1
1378 $ hg commit -m "m1"
1378 $ hg commit -m "m1"
1379 Invoking status precommit hook
1379 Invoking status precommit hook
1380 A f1
1380 A f1
1381 $ cd ..
1381 $ cd ..
1382 $ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid
1382 $ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid
1383 $ cat hg.pid >> $DAEMON_PIDS
1383 $ cat hg.pid >> $DAEMON_PIDS
1384 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2
1384 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2
1385 requesting all changes
1385 requesting all changes
1386 adding changesets
1386 adding changesets
1387 adding manifests
1387 adding manifests
1388 adding file changes
1388 adding file changes
1389 added 1 changesets with 1 changes to 1 files
1389 added 1 changesets with 1 changes to 1 files
1390 updating to branch default
1390 updating to branch default
1391 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1391 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1392
1392
1393 largefiles clients still work with vanilla servers
1393 largefiles clients still work with vanilla servers
1394 $ hg --config extensions.largefiles=! serve -R r1 -d -p $HGPORT1 --pid-file hg.pid
1394 $ hg --config extensions.largefiles=! serve -R r1 -d -p $HGPORT1 --pid-file hg.pid
1395 $ cat hg.pid >> $DAEMON_PIDS
1395 $ cat hg.pid >> $DAEMON_PIDS
1396 $ hg clone http://localhost:$HGPORT1 r3
1396 $ hg clone http://localhost:$HGPORT1 r3
1397 requesting all changes
1397 requesting all changes
1398 adding changesets
1398 adding changesets
1399 adding manifests
1399 adding manifests
1400 adding file changes
1400 adding file changes
1401 added 1 changesets with 1 changes to 1 files
1401 added 1 changesets with 1 changes to 1 files
1402 updating to branch default
1402 updating to branch default
1403 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1403 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1404 #endif
1404 #endif
1405
1405
1406
1406
1407 vanilla clients locked out from largefiles http repos
1407 vanilla clients locked out from largefiles http repos
1408 $ mkdir r4
1408 $ mkdir r4
1409 $ cd r4
1409 $ cd r4
1410 $ hg init
1410 $ hg init
1411 $ echo c1 > f1
1411 $ echo c1 > f1
1412 $ hg add --large f1
1412 $ hg add --large f1
1413 $ hg commit -m "m1"
1413 $ hg commit -m "m1"
1414 Invoking status precommit hook
1414 Invoking status precommit hook
1415 A f1
1415 A f1
1416 $ cd ..
1416 $ cd ..
1417
1417
1418 largefiles can be pushed locally (issue3583)
1418 largefiles can be pushed locally (issue3583)
1419 $ hg init dest
1419 $ hg init dest
1420 $ cd r4
1420 $ cd r4
1421 $ hg outgoing ../dest
1421 $ hg outgoing ../dest
1422 comparing with ../dest
1422 comparing with ../dest
1423 searching for changes
1423 searching for changes
1424 changeset: 0:639881c12b4c
1424 changeset: 0:639881c12b4c
1425 tag: tip
1425 tag: tip
1426 user: test
1426 user: test
1427 date: Thu Jan 01 00:00:00 1970 +0000
1427 date: Thu Jan 01 00:00:00 1970 +0000
1428 summary: m1
1428 summary: m1
1429
1429
1430 $ hg push ../dest
1430 $ hg push ../dest
1431 pushing to ../dest
1431 pushing to ../dest
1432 searching for changes
1432 searching for changes
1433 searching for changes
1433 searching for changes
1434 adding changesets
1434 adding changesets
1435 adding manifests
1435 adding manifests
1436 adding file changes
1436 adding file changes
1437 added 1 changesets with 1 changes to 1 files
1437 added 1 changesets with 1 changes to 1 files
1438
1438
1439 exit code with nothing outgoing (issue3611)
1439 exit code with nothing outgoing (issue3611)
1440 $ hg outgoing ../dest
1440 $ hg outgoing ../dest
1441 comparing with ../dest
1441 comparing with ../dest
1442 searching for changes
1442 searching for changes
1443 no changes found
1443 no changes found
1444 [1]
1444 [1]
1445 $ cd ..
1445 $ cd ..
1446
1446
1447 #if serve
1447 #if serve
1448 $ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid
1448 $ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid
1449 $ cat hg.pid >> $DAEMON_PIDS
1449 $ cat hg.pid >> $DAEMON_PIDS
1450 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5
1450 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5
1451 abort: remote error:
1451 abort: remote error:
1452
1452
1453 This repository uses the largefiles extension.
1453 This repository uses the largefiles extension.
1454
1454
1455 Please enable it in your Mercurial config file.
1455 Please enable it in your Mercurial config file.
1456 [255]
1456 [255]
1457
1457
1458 used all HGPORTs, kill all daemons
1458 used all HGPORTs, kill all daemons
1459 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1459 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1460 #endif
1460 #endif
1461
1461
1462 vanilla clients locked out from largefiles ssh repos
1462 vanilla clients locked out from largefiles ssh repos
1463 $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5
1463 $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5
1464 abort: remote error:
1464 abort: remote error:
1465
1465
1466 This repository uses the largefiles extension.
1466 This repository uses the largefiles extension.
1467
1467
1468 Please enable it in your Mercurial config file.
1468 Please enable it in your Mercurial config file.
1469 [255]
1469 [255]
1470
1470
1471 #if serve
1471 #if serve
1472
1472
1473 largefiles clients refuse to push largefiles repos to vanilla servers
1473 largefiles clients refuse to push largefiles repos to vanilla servers
1474 $ mkdir r6
1474 $ mkdir r6
1475 $ cd r6
1475 $ cd r6
1476 $ hg init
1476 $ hg init
1477 $ echo c1 > f1
1477 $ echo c1 > f1
1478 $ hg add f1
1478 $ hg add f1
1479 $ hg commit -m "m1"
1479 $ hg commit -m "m1"
1480 Invoking status precommit hook
1480 Invoking status precommit hook
1481 A f1
1481 A f1
1482 $ cat >> .hg/hgrc <<!
1482 $ cat >> .hg/hgrc <<!
1483 > [web]
1483 > [web]
1484 > push_ssl = false
1484 > push_ssl = false
1485 > allow_push = *
1485 > allow_push = *
1486 > !
1486 > !
1487 $ cd ..
1487 $ cd ..
1488 $ hg clone r6 r7
1488 $ hg clone r6 r7
1489 updating to branch default
1489 updating to branch default
1490 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1490 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1491 $ cd r7
1491 $ cd r7
1492 $ echo c2 > f2
1492 $ echo c2 > f2
1493 $ hg add --large f2
1493 $ hg add --large f2
1494 $ hg commit -m "m2"
1494 $ hg commit -m "m2"
1495 Invoking status precommit hook
1495 Invoking status precommit hook
1496 A f2
1496 A f2
1497 $ hg --config extensions.largefiles=! -R ../r6 serve -d -p $HGPORT --pid-file ../hg.pid
1497 $ hg --config extensions.largefiles=! -R ../r6 serve -d -p $HGPORT --pid-file ../hg.pid
1498 $ cat ../hg.pid >> $DAEMON_PIDS
1498 $ cat ../hg.pid >> $DAEMON_PIDS
1499 $ hg push http://localhost:$HGPORT
1499 $ hg push http://localhost:$HGPORT
1500 pushing to http://localhost:$HGPORT/
1500 pushing to http://localhost:$HGPORT/
1501 searching for changes
1501 searching for changes
1502 abort: http://localhost:$HGPORT/ does not appear to be a largefile store
1502 abort: http://localhost:$HGPORT/ does not appear to be a largefile store
1503 [255]
1503 [255]
1504 $ cd ..
1504 $ cd ..
1505
1505
1506 putlfile errors are shown (issue3123)
1506 putlfile errors are shown (issue3123)
1507 Corrupt the cached largefile in r7 and in the usercache (required for testing on vfat)
1507 Corrupt the cached largefile in r7 and in the usercache (required for testing on vfat)
1508 $ echo corruption > "$TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8"
1508 $ echo corruption > "$TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8"
1509 $ echo corruption > "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8"
1509 $ echo corruption > "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8"
1510 $ hg init empty
1510 $ hg init empty
1511 $ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \
1511 $ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \
1512 > --config 'web.allow_push=*' --config web.push_ssl=False
1512 > --config 'web.allow_push=*' --config web.push_ssl=False
1513 $ cat hg.pid >> $DAEMON_PIDS
1513 $ cat hg.pid >> $DAEMON_PIDS
1514 $ hg push -R r7 http://localhost:$HGPORT1
1514 $ hg push -R r7 http://localhost:$HGPORT1
1515 pushing to http://localhost:$HGPORT1/
1515 pushing to http://localhost:$HGPORT1/
1516 searching for changes
1516 searching for changes
1517 remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash
1517 remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash
1518 abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob)
1518 abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob)
1519 [255]
1519 [255]
1520 $ rm -rf empty
1520 $ rm -rf empty
1521
1521
1522 Push a largefiles repository to a served empty repository
1522 Push a largefiles repository to a served empty repository
1523 $ hg init r8
1523 $ hg init r8
1524 $ echo c3 > r8/f1
1524 $ echo c3 > r8/f1
1525 $ hg add --large r8/f1 -R r8
1525 $ hg add --large r8/f1 -R r8
1526 $ hg commit -m "m1" -R r8
1526 $ hg commit -m "m1" -R r8
1527 Invoking status precommit hook
1527 Invoking status precommit hook
1528 A f1
1528 A f1
1529 $ hg init empty
1529 $ hg init empty
1530 $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
1530 $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
1531 > --config 'web.allow_push=*' --config web.push_ssl=False
1531 > --config 'web.allow_push=*' --config web.push_ssl=False
1532 $ cat hg.pid >> $DAEMON_PIDS
1532 $ cat hg.pid >> $DAEMON_PIDS
1533 $ rm "${USERCACHE}"/*
1533 $ rm "${USERCACHE}"/*
1534 $ hg push -R r8 http://localhost:$HGPORT2
1534 $ hg push -R r8 http://localhost:$HGPORT2
1535 pushing to http://localhost:$HGPORT2/
1535 pushing to http://localhost:$HGPORT2/
1536 searching for changes
1536 searching for changes
1537 searching for changes
1537 searching for changes
1538 remote: adding changesets
1538 remote: adding changesets
1539 remote: adding manifests
1539 remote: adding manifests
1540 remote: adding file changes
1540 remote: adding file changes
1541 remote: added 1 changesets with 1 changes to 1 files
1541 remote: added 1 changesets with 1 changes to 1 files
1542 $ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1542 $ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1543 $ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1543 $ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1544
1544
1545 Clone over http, no largefiles pulled on clone.
1545 Clone over http, no largefiles pulled on clone.
1546
1546
1547 $ hg clone http://localhost:$HGPORT2/ http-clone -U
1547 $ hg clone http://localhost:$HGPORT2/ http-clone -U
1548 requesting all changes
1548 requesting all changes
1549 adding changesets
1549 adding changesets
1550 adding manifests
1550 adding manifests
1551 adding file changes
1551 adding file changes
1552 added 1 changesets with 1 changes to 1 files
1552 added 1 changesets with 1 changes to 1 files
1553
1553
1554 test 'verify' with remotestore:
1554 test 'verify' with remotestore:
1555
1555
1556 $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
1556 $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
1557 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1557 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1558 $ hg -R http-clone verify --large --lfa
1558 $ hg -R http-clone verify --large --lfa
1559 checking changesets
1559 checking changesets
1560 checking manifests
1560 checking manifests
1561 crosschecking files in changesets and manifests
1561 crosschecking files in changesets and manifests
1562 checking files
1562 checking files
1563 1 files, 1 changesets, 1 total revisions
1563 1 files, 1 changesets, 1 total revisions
1564 searching 1 changesets for largefiles
1564 searching 1 changesets for largefiles
1565 changeset 0:cf03e5bb9936: f1 missing
1565 changeset 0:cf03e5bb9936: f1 missing
1566 verified existence of 1 revisions of 1 largefiles
1566 verified existence of 1 revisions of 1 largefiles
1567 [1]
1567 [1]
1568 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1568 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1569 $ hg -R http-clone -q verify --large --lfa
1569 $ hg -R http-clone -q verify --large --lfa
1570 searching 1 changesets for largefiles
1570 searching 1 changesets for largefiles
1571 verified existence of 1 revisions of 1 largefiles
1571 verified existence of 1 revisions of 1 largefiles
1572
1572
1573 largefiles pulled on update - a largefile missing on the server:
1573 largefiles pulled on update - a largefile missing on the server:
1574 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1574 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1575 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1575 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1576 getting changed largefiles
1576 getting changed largefiles
1577 error getting id 02a439e5c31c526465ab1a0ca1f431f76b827b90 from url http://localhost:$HGPORT2/ for file f1: HTTP Error 500: Internal Server Error
1577 abort: remotestore: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 is missing
1578 0 largefiles updated, 0 removed
1578 [255]
1579 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1580 $ hg -R http-clone up -Cqr null
1579 $ hg -R http-clone up -Cqr null
1581
1580
1582 largefiles pulled on update - a largefile corrupted on the server:
1581 largefiles pulled on update - a largefile corrupted on the server:
1583 $ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
1582 $ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
1584 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1583 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1585 getting changed largefiles
1584 getting changed largefiles
1586 f1: data corruption (expected 02a439e5c31c526465ab1a0ca1f431f76b827b90, got 6a7bb2556144babe3899b25e5428123735bb1e27)
1585 abort: remotestore: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 is invalid
1587 0 largefiles updated, 0 removed
1586 [255]
1588 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1589 $ hg -R http-clone st
1587 $ hg -R http-clone st
1590 ! f1
1588 ! f1
1591 $ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1589 $ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1592 $ [ ! -f http-clone/f1 ]
1590 $ [ ! -f http-clone/f1 ]
1593 $ [ ! -f http-clone-usercache ]
1591 $ [ ! -f http-clone-usercache ]
1594 $ hg -R http-clone verify --large --lfc
1592 $ hg -R http-clone verify --large --lfc
1595 checking changesets
1593 checking changesets
1596 checking manifests
1594 checking manifests
1597 crosschecking files in changesets and manifests
1595 crosschecking files in changesets and manifests
1598 checking files
1596 checking files
1599 1 files, 1 changesets, 1 total revisions
1597 1 files, 1 changesets, 1 total revisions
1600 searching 1 changesets for largefiles
1598 searching 1 changesets for largefiles
1601 changeset 0:cf03e5bb9936: f1: contents differ
1599 changeset 0:cf03e5bb9936: f1: contents differ
1602 verified contents of 1 revisions of 1 largefiles
1600 verified contents of 1 revisions of 1 largefiles
1603 [1]
1601 [1]
1604 $ hg -R http-clone up -Cqr null
1602 $ hg -R http-clone up -Cqr null
1605 $ rm http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
1606
1603
1607 largefiles pulled on update - no server side problems:
1604 largefiles pulled on update - no server side problems:
1608 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1605 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1609 $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache
1606 $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache
1610 resolving manifests
1607 resolving manifests
1611 overwrite: False, partial: False
1608 overwrite: False, partial: False
1612 ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936
1609 ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936
1613 .hglf/f1: remote created -> g
1610 .hglf/f1: remote created -> g
1614 updating: .hglf/f1 1/1 files (100.00%)
1611 updating: .hglf/f1 1/1 files (100.00%)
1615 getting .hglf/f1
1612 getting .hglf/f1
1616 getting changed largefiles
1613 getting changed largefiles
1617 using http://localhost:$HGPORT2/
1614 using http://localhost:$HGPORT2/
1618 sending capabilities command
1615 sending capabilities command
1619 getting largefiles: 0/1 lfile (0.00%)
1616 getting largefiles: 0/1 lfile (0.00%)
1620 getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90
1617 getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90
1621 sending batch command
1618 sending batch command
1622 sending getlfile command
1619 sending getlfile command
1623 found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store
1620 found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store
1624 1 largefiles updated, 0 removed
1621 1 largefiles updated, 0 removed
1625 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1622 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1626
1623
1627 $ ls http-clone-usercache/*
1624 $ ls http-clone-usercache/*
1628 http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
1625 http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
1629
1626
1630 $ rm -rf empty http-clone*
1627 $ rm -rf empty http-clone*
1631
1628
1632 used all HGPORTs, kill all daemons
1629 used all HGPORTs, kill all daemons
1633 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1630 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1634
1631
1635 #endif
1632 #endif
1636
1633
1637
1634
1638 #if unix-permissions
1635 #if unix-permissions
1639
1636
1640 Clone a local repository owned by another user
1637 Clone a local repository owned by another user
1641 We have to simulate that here by setting $HOME and removing write permissions
1638 We have to simulate that here by setting $HOME and removing write permissions
1642 $ ORIGHOME="$HOME"
1639 $ ORIGHOME="$HOME"
1643 $ mkdir alice
1640 $ mkdir alice
1644 $ HOME="`pwd`/alice"
1641 $ HOME="`pwd`/alice"
1645 $ cd alice
1642 $ cd alice
1646 $ hg init pubrepo
1643 $ hg init pubrepo
1647 $ cd pubrepo
1644 $ cd pubrepo
1648 $ dd if=/dev/zero bs=1k count=11k > a-large-file 2> /dev/null
1645 $ dd if=/dev/zero bs=1k count=11k > a-large-file 2> /dev/null
1649 $ hg add --large a-large-file
1646 $ hg add --large a-large-file
1650 $ hg commit -m "Add a large file"
1647 $ hg commit -m "Add a large file"
1651 Invoking status precommit hook
1648 Invoking status precommit hook
1652 A a-large-file
1649 A a-large-file
1653 $ cd ..
1650 $ cd ..
1654 $ chmod -R a-w pubrepo
1651 $ chmod -R a-w pubrepo
1655 $ cd ..
1652 $ cd ..
1656 $ mkdir bob
1653 $ mkdir bob
1657 $ HOME="`pwd`/bob"
1654 $ HOME="`pwd`/bob"
1658 $ cd bob
1655 $ cd bob
1659 $ hg clone --pull ../alice/pubrepo pubrepo
1656 $ hg clone --pull ../alice/pubrepo pubrepo
1660 requesting all changes
1657 requesting all changes
1661 adding changesets
1658 adding changesets
1662 adding manifests
1659 adding manifests
1663 adding file changes
1660 adding file changes
1664 added 1 changesets with 1 changes to 1 files
1661 added 1 changesets with 1 changes to 1 files
1665 updating to branch default
1662 updating to branch default
1666 getting changed largefiles
1663 getting changed largefiles
1667 1 largefiles updated, 0 removed
1664 1 largefiles updated, 0 removed
1668 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1665 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1669 $ cd ..
1666 $ cd ..
1670 $ chmod -R u+w alice/pubrepo
1667 $ chmod -R u+w alice/pubrepo
1671 $ HOME="$ORIGHOME"
1668 $ HOME="$ORIGHOME"
1672
1669
1673 #endif
1670 #endif
1674
1671
1675 #if symlink
1672 #if symlink
1676
1673
1677 Symlink to a large largefile should behave the same as a symlink to a normal file
1674 Symlink to a large largefile should behave the same as a symlink to a normal file
1678 $ hg init largesymlink
1675 $ hg init largesymlink
1679 $ cd largesymlink
1676 $ cd largesymlink
1680 $ dd if=/dev/zero bs=1k count=10k of=largefile 2>/dev/null
1677 $ dd if=/dev/zero bs=1k count=10k of=largefile 2>/dev/null
1681 $ hg add --large largefile
1678 $ hg add --large largefile
1682 $ hg commit -m "commit a large file"
1679 $ hg commit -m "commit a large file"
1683 Invoking status precommit hook
1680 Invoking status precommit hook
1684 A largefile
1681 A largefile
1685 $ ln -s largefile largelink
1682 $ ln -s largefile largelink
1686 $ hg add largelink
1683 $ hg add largelink
1687 $ hg commit -m "commit a large symlink"
1684 $ hg commit -m "commit a large symlink"
1688 Invoking status precommit hook
1685 Invoking status precommit hook
1689 A largelink
1686 A largelink
1690 $ rm -f largelink
1687 $ rm -f largelink
1691 $ hg up >/dev/null
1688 $ hg up >/dev/null
1692 $ test -f largelink
1689 $ test -f largelink
1693 [1]
1690 [1]
1694 $ test -L largelink
1691 $ test -L largelink
1695 [1]
1692 [1]
1696 $ rm -f largelink # make next part of the test independent of the previous
1693 $ rm -f largelink # make next part of the test independent of the previous
1697 $ hg up -C >/dev/null
1694 $ hg up -C >/dev/null
1698 $ test -f largelink
1695 $ test -f largelink
1699 $ test -L largelink
1696 $ test -L largelink
1700 $ cd ..
1697 $ cd ..
1701
1698
1702 #endif
1699 #endif
1703
1700
1704 test for pattern matching on 'hg status':
1701 test for pattern matching on 'hg status':
1705 to boost performance, largefiles checks whether specified patterns are
1702 to boost performance, largefiles checks whether specified patterns are
1706 related to largefiles in working directory (NOT to STANDIN) or not.
1703 related to largefiles in working directory (NOT to STANDIN) or not.
1707
1704
1708 $ hg init statusmatch
1705 $ hg init statusmatch
1709 $ cd statusmatch
1706 $ cd statusmatch
1710
1707
1711 $ mkdir -p a/b/c/d
1708 $ mkdir -p a/b/c/d
1712 $ echo normal > a/b/c/d/e.normal.txt
1709 $ echo normal > a/b/c/d/e.normal.txt
1713 $ hg add a/b/c/d/e.normal.txt
1710 $ hg add a/b/c/d/e.normal.txt
1714 $ echo large > a/b/c/d/e.large.txt
1711 $ echo large > a/b/c/d/e.large.txt
1715 $ hg add --large a/b/c/d/e.large.txt
1712 $ hg add --large a/b/c/d/e.large.txt
1716 $ mkdir -p a/b/c/x
1713 $ mkdir -p a/b/c/x
1717 $ echo normal > a/b/c/x/y.normal.txt
1714 $ echo normal > a/b/c/x/y.normal.txt
1718 $ hg add a/b/c/x/y.normal.txt
1715 $ hg add a/b/c/x/y.normal.txt
1719 $ hg commit -m 'add files'
1716 $ hg commit -m 'add files'
1720 Invoking status precommit hook
1717 Invoking status precommit hook
1721 A a/b/c/d/e.large.txt
1718 A a/b/c/d/e.large.txt
1722 A a/b/c/d/e.normal.txt
1719 A a/b/c/d/e.normal.txt
1723 A a/b/c/x/y.normal.txt
1720 A a/b/c/x/y.normal.txt
1724
1721
1725 (1) no pattern: no performance boost
1722 (1) no pattern: no performance boost
1726 $ hg status -A
1723 $ hg status -A
1727 C a/b/c/d/e.large.txt
1724 C a/b/c/d/e.large.txt
1728 C a/b/c/d/e.normal.txt
1725 C a/b/c/d/e.normal.txt
1729 C a/b/c/x/y.normal.txt
1726 C a/b/c/x/y.normal.txt
1730
1727
1731 (2) pattern not related to largefiles: performance boost
1728 (2) pattern not related to largefiles: performance boost
1732 $ hg status -A a/b/c/x
1729 $ hg status -A a/b/c/x
1733 C a/b/c/x/y.normal.txt
1730 C a/b/c/x/y.normal.txt
1734
1731
1735 (3) pattern related to largefiles: no performance boost
1732 (3) pattern related to largefiles: no performance boost
1736 $ hg status -A a/b/c/d
1733 $ hg status -A a/b/c/d
1737 C a/b/c/d/e.large.txt
1734 C a/b/c/d/e.large.txt
1738 C a/b/c/d/e.normal.txt
1735 C a/b/c/d/e.normal.txt
1739
1736
1740 (4) pattern related to STANDIN (not to largefiles): performance boost
1737 (4) pattern related to STANDIN (not to largefiles): performance boost
1741 $ hg status -A .hglf/a
1738 $ hg status -A .hglf/a
1742 C .hglf/a/b/c/d/e.large.txt
1739 C .hglf/a/b/c/d/e.large.txt
1743
1740
1744 (5) mixed case: no performance boost
1741 (5) mixed case: no performance boost
1745 $ hg status -A a/b/c/x a/b/c/d
1742 $ hg status -A a/b/c/x a/b/c/d
1746 C a/b/c/d/e.large.txt
1743 C a/b/c/d/e.large.txt
1747 C a/b/c/d/e.normal.txt
1744 C a/b/c/d/e.normal.txt
1748 C a/b/c/x/y.normal.txt
1745 C a/b/c/x/y.normal.txt
1749
1746
1750 verify that largefiles doesn't break filesets
1747 verify that largefiles doesn't break filesets
1751
1748
1752 $ hg log --rev . --exclude "set:binary()"
1749 $ hg log --rev . --exclude "set:binary()"
1753 changeset: 0:41bd42f10efa
1750 changeset: 0:41bd42f10efa
1754 tag: tip
1751 tag: tip
1755 user: test
1752 user: test
1756 date: Thu Jan 01 00:00:00 1970 +0000
1753 date: Thu Jan 01 00:00:00 1970 +0000
1757 summary: add files
1754 summary: add files
1758
1755
1759 verify that large files in subrepos handled properly
1756 verify that large files in subrepos handled properly
1760 $ hg init subrepo
1757 $ hg init subrepo
1761 $ echo "subrepo = subrepo" > .hgsub
1758 $ echo "subrepo = subrepo" > .hgsub
1762 $ hg add .hgsub
1759 $ hg add .hgsub
1763 $ hg ci -m "add subrepo"
1760 $ hg ci -m "add subrepo"
1764 Invoking status precommit hook
1761 Invoking status precommit hook
1765 A .hgsub
1762 A .hgsub
1766 ? .hgsubstate
1763 ? .hgsubstate
1767 $ echo "rev 1" > subrepo/large.txt
1764 $ echo "rev 1" > subrepo/large.txt
1768 $ hg -R subrepo add --large subrepo/large.txt
1765 $ hg -R subrepo add --large subrepo/large.txt
1769 $ hg sum
1766 $ hg sum
1770 parent: 1:8ee150ea2e9c tip
1767 parent: 1:8ee150ea2e9c tip
1771 add subrepo
1768 add subrepo
1772 branch: default
1769 branch: default
1773 commit: 1 subrepos
1770 commit: 1 subrepos
1774 update: (current)
1771 update: (current)
1775 $ hg st
1772 $ hg st
1776 $ hg st -S
1773 $ hg st -S
1777 A subrepo/large.txt
1774 A subrepo/large.txt
1778 $ hg ci -S -m "commit top repo"
1775 $ hg ci -S -m "commit top repo"
1779 committing subrepository subrepo
1776 committing subrepository subrepo
1780 Invoking status precommit hook
1777 Invoking status precommit hook
1781 A large.txt
1778 A large.txt
1782 Invoking status precommit hook
1779 Invoking status precommit hook
1783 M .hgsubstate
1780 M .hgsubstate
1784 # No differences
1781 # No differences
1785 $ hg st -S
1782 $ hg st -S
1786 $ hg sum
1783 $ hg sum
1787 parent: 2:ce4cd0c527a6 tip
1784 parent: 2:ce4cd0c527a6 tip
1788 commit top repo
1785 commit top repo
1789 branch: default
1786 branch: default
1790 commit: (clean)
1787 commit: (clean)
1791 update: (current)
1788 update: (current)
1792 $ echo "rev 2" > subrepo/large.txt
1789 $ echo "rev 2" > subrepo/large.txt
1793 $ hg st -S
1790 $ hg st -S
1794 M subrepo/large.txt
1791 M subrepo/large.txt
1795 $ hg sum
1792 $ hg sum
1796 parent: 2:ce4cd0c527a6 tip
1793 parent: 2:ce4cd0c527a6 tip
1797 commit top repo
1794 commit top repo
1798 branch: default
1795 branch: default
1799 commit: 1 subrepos
1796 commit: 1 subrepos
1800 update: (current)
1797 update: (current)
1801 $ hg ci -m "this commit should fail without -S"
1798 $ hg ci -m "this commit should fail without -S"
1802 abort: uncommitted changes in subrepo subrepo
1799 abort: uncommitted changes in subrepo subrepo
1803 (use --subrepos for recursive commit)
1800 (use --subrepos for recursive commit)
1804 [255]
1801 [255]
1805
1802
1806 Add a normal file to the subrepo, then test archiving
1803 Add a normal file to the subrepo, then test archiving
1807
1804
1808 $ echo 'normal file' > subrepo/normal.txt
1805 $ echo 'normal file' > subrepo/normal.txt
1809 $ hg -R subrepo add subrepo/normal.txt
1806 $ hg -R subrepo add subrepo/normal.txt
1810
1807
1811 Lock in subrepo, otherwise the change isn't archived
1808 Lock in subrepo, otherwise the change isn't archived
1812
1809
1813 $ hg ci -S -m "add normal file to top level"
1810 $ hg ci -S -m "add normal file to top level"
1814 committing subrepository subrepo
1811 committing subrepository subrepo
1815 Invoking status precommit hook
1812 Invoking status precommit hook
1816 M large.txt
1813 M large.txt
1817 A normal.txt
1814 A normal.txt
1818 Invoking status precommit hook
1815 Invoking status precommit hook
1819 M .hgsubstate
1816 M .hgsubstate
1820 $ hg archive -S ../lf_subrepo_archive
1817 $ hg archive -S ../lf_subrepo_archive
1821 $ find ../lf_subrepo_archive | sort
1818 $ find ../lf_subrepo_archive | sort
1822 ../lf_subrepo_archive
1819 ../lf_subrepo_archive
1823 ../lf_subrepo_archive/.hg_archival.txt
1820 ../lf_subrepo_archive/.hg_archival.txt
1824 ../lf_subrepo_archive/.hgsub
1821 ../lf_subrepo_archive/.hgsub
1825 ../lf_subrepo_archive/.hgsubstate
1822 ../lf_subrepo_archive/.hgsubstate
1826 ../lf_subrepo_archive/a
1823 ../lf_subrepo_archive/a
1827 ../lf_subrepo_archive/a/b
1824 ../lf_subrepo_archive/a/b
1828 ../lf_subrepo_archive/a/b/c
1825 ../lf_subrepo_archive/a/b/c
1829 ../lf_subrepo_archive/a/b/c/d
1826 ../lf_subrepo_archive/a/b/c/d
1830 ../lf_subrepo_archive/a/b/c/d/e.large.txt
1827 ../lf_subrepo_archive/a/b/c/d/e.large.txt
1831 ../lf_subrepo_archive/a/b/c/d/e.normal.txt
1828 ../lf_subrepo_archive/a/b/c/d/e.normal.txt
1832 ../lf_subrepo_archive/a/b/c/x
1829 ../lf_subrepo_archive/a/b/c/x
1833 ../lf_subrepo_archive/a/b/c/x/y.normal.txt
1830 ../lf_subrepo_archive/a/b/c/x/y.normal.txt
1834 ../lf_subrepo_archive/subrepo
1831 ../lf_subrepo_archive/subrepo
1835 ../lf_subrepo_archive/subrepo/large.txt
1832 ../lf_subrepo_archive/subrepo/large.txt
1836 ../lf_subrepo_archive/subrepo/normal.txt
1833 ../lf_subrepo_archive/subrepo/normal.txt
1837
1834
1838 Test update with subrepos.
1835 Test update with subrepos.
1839
1836
1840 $ hg update 0
1837 $ hg update 0
1841 getting changed largefiles
1838 getting changed largefiles
1842 0 largefiles updated, 1 removed
1839 0 largefiles updated, 1 removed
1843 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1840 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1844 $ hg status -S
1841 $ hg status -S
1845 $ hg update tip
1842 $ hg update tip
1846 getting changed largefiles
1843 getting changed largefiles
1847 1 largefiles updated, 0 removed
1844 1 largefiles updated, 0 removed
1848 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1845 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1849 $ hg status -S
1846 $ hg status -S
1850 # modify a large file
1847 # modify a large file
1851 $ echo "modified" > subrepo/large.txt
1848 $ echo "modified" > subrepo/large.txt
1852 $ hg st -S
1849 $ hg st -S
1853 M subrepo/large.txt
1850 M subrepo/large.txt
1854 # update -C should revert the change.
1851 # update -C should revert the change.
1855 $ hg update -C
1852 $ hg update -C
1856 getting changed largefiles
1853 getting changed largefiles
1857 1 largefiles updated, 0 removed
1854 1 largefiles updated, 0 removed
1858 getting changed largefiles
1855 getting changed largefiles
1859 0 largefiles updated, 0 removed
1856 0 largefiles updated, 0 removed
1860 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1857 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1861 $ hg status -S
1858 $ hg status -S
1862
1859
1863 Test archiving a revision that references a subrepo that is not yet
1860 Test archiving a revision that references a subrepo that is not yet
1864 cloned (see test-subrepo-recursion.t):
1861 cloned (see test-subrepo-recursion.t):
1865
1862
1866 $ hg clone -U . ../empty
1863 $ hg clone -U . ../empty
1867 $ cd ../empty
1864 $ cd ../empty
1868 $ hg archive --subrepos -r tip ../archive.tar.gz
1865 $ hg archive --subrepos -r tip ../archive.tar.gz
1869 cloning subrepo subrepo from $TESTTMP/statusmatch/subrepo
1866 cloning subrepo subrepo from $TESTTMP/statusmatch/subrepo
1870 $ cd ..
1867 $ cd ..
1871
1868
1872 Test that addremove picks up largefiles prior to the initial commit (issue3541)
1869 Test that addremove picks up largefiles prior to the initial commit (issue3541)
1873
1870
1874 $ hg init addrm2
1871 $ hg init addrm2
1875 $ cd addrm2
1872 $ cd addrm2
1876 $ touch large.dat
1873 $ touch large.dat
1877 $ touch large2.dat
1874 $ touch large2.dat
1878 $ touch normal
1875 $ touch normal
1879 $ hg add --large large.dat
1876 $ hg add --large large.dat
1880 $ hg addremove -v
1877 $ hg addremove -v
1881 adding large2.dat as a largefile
1878 adding large2.dat as a largefile
1882 adding normal
1879 adding normal
1883
1880
1884 Test that forgetting all largefiles reverts to islfilesrepo() == False
1881 Test that forgetting all largefiles reverts to islfilesrepo() == False
1885 (addremove will add *.dat as normal files now)
1882 (addremove will add *.dat as normal files now)
1886 $ hg forget large.dat
1883 $ hg forget large.dat
1887 $ hg forget large2.dat
1884 $ hg forget large2.dat
1888 $ hg addremove -v
1885 $ hg addremove -v
1889 adding large.dat
1886 adding large.dat
1890 adding large2.dat
1887 adding large2.dat
1891
1888
1892 Test commit's addremove option prior to the first commit
1889 Test commit's addremove option prior to the first commit
1893 $ hg forget large.dat
1890 $ hg forget large.dat
1894 $ hg forget large2.dat
1891 $ hg forget large2.dat
1895 $ hg add --large large.dat
1892 $ hg add --large large.dat
1896 $ hg ci -Am "commit"
1893 $ hg ci -Am "commit"
1897 adding large2.dat as a largefile
1894 adding large2.dat as a largefile
1898 Invoking status precommit hook
1895 Invoking status precommit hook
1899 A large.dat
1896 A large.dat
1900 A large2.dat
1897 A large2.dat
1901 A normal
1898 A normal
1902 $ find .hglf | sort
1899 $ find .hglf | sort
1903 .hglf
1900 .hglf
1904 .hglf/large.dat
1901 .hglf/large.dat
1905 .hglf/large2.dat
1902 .hglf/large2.dat
1906
1903
1907 $ cd ..
1904 $ cd ..
1908
1905
1909 issue3651: summary/outgoing with largefiles shows "no remote repo"
1906 issue3651: summary/outgoing with largefiles shows "no remote repo"
1910 unexpectedly
1907 unexpectedly
1911
1908
1912 $ mkdir issue3651
1909 $ mkdir issue3651
1913 $ cd issue3651
1910 $ cd issue3651
1914
1911
1915 $ hg init src
1912 $ hg init src
1916 $ echo a > src/a
1913 $ echo a > src/a
1917 $ hg -R src add --large src/a
1914 $ hg -R src add --large src/a
1918 $ hg -R src commit -m '#0'
1915 $ hg -R src commit -m '#0'
1919 Invoking status precommit hook
1916 Invoking status precommit hook
1920 A a
1917 A a
1921
1918
1922 check messages when no remote repository is specified:
1919 check messages when no remote repository is specified:
1923 "no remote repo" route for "hg outgoing --large" is not tested here,
1920 "no remote repo" route for "hg outgoing --large" is not tested here,
1924 because it can't be reproduced easily.
1921 because it can't be reproduced easily.
1925
1922
1926 $ hg init clone1
1923 $ hg init clone1
1927 $ hg -R clone1 -q pull src
1924 $ hg -R clone1 -q pull src
1928 $ hg -R clone1 -q update
1925 $ hg -R clone1 -q update
1929 $ hg -R clone1 paths | grep default
1926 $ hg -R clone1 paths | grep default
1930 [1]
1927 [1]
1931
1928
1932 $ hg -R clone1 summary --large
1929 $ hg -R clone1 summary --large
1933 parent: 0:fc0bd45326d3 tip
1930 parent: 0:fc0bd45326d3 tip
1934 #0
1931 #0
1935 branch: default
1932 branch: default
1936 commit: (clean)
1933 commit: (clean)
1937 update: (current)
1934 update: (current)
1938 largefiles: (no remote repo)
1935 largefiles: (no remote repo)
1939
1936
1940 check messages when there is no files to upload:
1937 check messages when there is no files to upload:
1941
1938
1942 $ hg -q clone src clone2
1939 $ hg -q clone src clone2
1943 $ hg -R clone2 paths | grep default
1940 $ hg -R clone2 paths | grep default
1944 default = $TESTTMP/issue3651/src (glob)
1941 default = $TESTTMP/issue3651/src (glob)
1945
1942
1946 $ hg -R clone2 summary --large
1943 $ hg -R clone2 summary --large
1947 parent: 0:fc0bd45326d3 tip
1944 parent: 0:fc0bd45326d3 tip
1948 #0
1945 #0
1949 branch: default
1946 branch: default
1950 commit: (clean)
1947 commit: (clean)
1951 update: (current)
1948 update: (current)
1952 searching for changes
1949 searching for changes
1953 largefiles: (no files to upload)
1950 largefiles: (no files to upload)
1954 $ hg -R clone2 outgoing --large
1951 $ hg -R clone2 outgoing --large
1955 comparing with $TESTTMP/issue3651/src (glob)
1952 comparing with $TESTTMP/issue3651/src (glob)
1956 searching for changes
1953 searching for changes
1957 no changes found
1954 no changes found
1958 searching for changes
1955 searching for changes
1959 largefiles: no files to upload
1956 largefiles: no files to upload
1960 [1]
1957 [1]
1961
1958
1962 check messages when there are files to upload:
1959 check messages when there are files to upload:
1963
1960
1964 $ echo b > clone2/b
1961 $ echo b > clone2/b
1965 $ hg -R clone2 add --large clone2/b
1962 $ hg -R clone2 add --large clone2/b
1966 $ hg -R clone2 commit -m '#1'
1963 $ hg -R clone2 commit -m '#1'
1967 Invoking status precommit hook
1964 Invoking status precommit hook
1968 A b
1965 A b
1969 $ hg -R clone2 summary --large
1966 $ hg -R clone2 summary --large
1970 parent: 1:1acbe71ce432 tip
1967 parent: 1:1acbe71ce432 tip
1971 #1
1968 #1
1972 branch: default
1969 branch: default
1973 commit: (clean)
1970 commit: (clean)
1974 update: (current)
1971 update: (current)
1975 searching for changes
1972 searching for changes
1976 largefiles: 1 to upload
1973 largefiles: 1 to upload
1977 $ hg -R clone2 outgoing --large
1974 $ hg -R clone2 outgoing --large
1978 comparing with $TESTTMP/issue3651/src (glob)
1975 comparing with $TESTTMP/issue3651/src (glob)
1979 searching for changes
1976 searching for changes
1980 changeset: 1:1acbe71ce432
1977 changeset: 1:1acbe71ce432
1981 tag: tip
1978 tag: tip
1982 user: test
1979 user: test
1983 date: Thu Jan 01 00:00:00 1970 +0000
1980 date: Thu Jan 01 00:00:00 1970 +0000
1984 summary: #1
1981 summary: #1
1985
1982
1986 searching for changes
1983 searching for changes
1987 largefiles to upload:
1984 largefiles to upload:
1988 b
1985 b
1989
1986
1990
1987
1991 $ cd ..
1988 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now