##// END OF EJS Templates
largefiles: verify status should be written as status, not as write...
Mads Kiilerich -
r18546:fb0e8966 default
parent child Browse files
Show More
@@ -1,192 +1,193 b''
1 # Copyright 2009-2010 Gregory P. Ward
1 # Copyright 2009-2010 Gregory P. Ward
2 # Copyright 2009-2010 Intelerad Medical Systems Incorporated
2 # Copyright 2009-2010 Intelerad Medical Systems Incorporated
3 # Copyright 2010-2011 Fog Creek Software
3 # Copyright 2010-2011 Fog Creek Software
4 # Copyright 2010-2011 Unity Technologies
4 # Copyright 2010-2011 Unity Technologies
5 #
5 #
6 # This software may be used and distributed according to the terms of the
6 # This software may be used and distributed according to the terms of the
7 # GNU General Public License version 2 or any later version.
7 # GNU General Public License version 2 or any later version.
8
8
9 '''base class for store implementations and store-related utility code'''
9 '''base class for store implementations and store-related utility code'''
10
10
11 import binascii
11 import binascii
12 import re
12 import re
13
13
14 from mercurial import util, node, hg
14 from mercurial import util, node, hg
15 from mercurial.i18n import _
15 from mercurial.i18n import _
16
16
17 import lfutil
17 import lfutil
18
18
19 class StoreError(Exception):
19 class StoreError(Exception):
20 '''Raised when there is a problem getting files from or putting
20 '''Raised when there is a problem getting files from or putting
21 files to a central store.'''
21 files to a central store.'''
22 def __init__(self, filename, hash, url, detail):
22 def __init__(self, filename, hash, url, detail):
23 self.filename = filename
23 self.filename = filename
24 self.hash = hash
24 self.hash = hash
25 self.url = url
25 self.url = url
26 self.detail = detail
26 self.detail = detail
27
27
28 def longmessage(self):
28 def longmessage(self):
29 return (_("error getting id %s from url %s for file %s: %s\n") %
29 return (_("error getting id %s from url %s for file %s: %s\n") %
30 (self.hash, self.url, self.filename, self.detail))
30 (self.hash, self.url, self.filename, self.detail))
31
31
32 def __str__(self):
32 def __str__(self):
33 return "%s: %s" % (self.url, self.detail)
33 return "%s: %s" % (self.url, self.detail)
34
34
35 class basestore(object):
35 class basestore(object):
36 def __init__(self, ui, repo, url):
36 def __init__(self, ui, repo, url):
37 self.ui = ui
37 self.ui = ui
38 self.repo = repo
38 self.repo = repo
39 self.url = url
39 self.url = url
40
40
41 def put(self, source, hash):
41 def put(self, source, hash):
42 '''Put source file into the store under <filename>/<hash>.'''
42 '''Put source file into the store under <filename>/<hash>.'''
43 raise NotImplementedError('abstract method')
43 raise NotImplementedError('abstract method')
44
44
45 def exists(self, hashes):
45 def exists(self, hashes):
46 '''Check to see if the store contains the given hashes.'''
46 '''Check to see if the store contains the given hashes.'''
47 raise NotImplementedError('abstract method')
47 raise NotImplementedError('abstract method')
48
48
49 def get(self, files):
49 def get(self, files):
50 '''Get the specified largefiles from the store and write to local
50 '''Get the specified largefiles from the store and write to local
51 files under repo.root. files is a list of (filename, hash)
51 files under repo.root. files is a list of (filename, hash)
52 tuples. Return (success, missing), lists of files successfully
52 tuples. Return (success, missing), lists of files successfully
53 downloaded and those not found in the store. success is a list
53 downloaded and those not found in the store. success is a list
54 of (filename, hash) tuples; missing is a list of filenames that
54 of (filename, hash) tuples; missing is a list of filenames that
55 we could not get. (The detailed error message will already have
55 we could not get. (The detailed error message will already have
56 been presented to the user, so missing is just supplied as a
56 been presented to the user, so missing is just supplied as a
57 summary.)'''
57 summary.)'''
58 success = []
58 success = []
59 missing = []
59 missing = []
60 ui = self.ui
60 ui = self.ui
61
61
62 at = 0
62 at = 0
63 for filename, hash in files:
63 for filename, hash in files:
64 ui.progress(_('getting largefiles'), at, unit='lfile',
64 ui.progress(_('getting largefiles'), at, unit='lfile',
65 total=len(files))
65 total=len(files))
66 at += 1
66 at += 1
67 ui.note(_('getting %s:%s\n') % (filename, hash))
67 ui.note(_('getting %s:%s\n') % (filename, hash))
68
68
69 storefilename = lfutil.storepath(self.repo, hash)
69 storefilename = lfutil.storepath(self.repo, hash)
70 tmpfile = util.atomictempfile(storefilename + '.tmp',
70 tmpfile = util.atomictempfile(storefilename + '.tmp',
71 createmode=self.repo.store.createmode)
71 createmode=self.repo.store.createmode)
72
72
73 try:
73 try:
74 hhash = binascii.hexlify(self._getfile(tmpfile, filename, hash))
74 hhash = binascii.hexlify(self._getfile(tmpfile, filename, hash))
75 except StoreError, err:
75 except StoreError, err:
76 ui.warn(err.longmessage())
76 ui.warn(err.longmessage())
77 hhash = ""
77 hhash = ""
78 tmpfile.close() # has probably already been closed!
78 tmpfile.close() # has probably already been closed!
79
79
80 if hhash != hash:
80 if hhash != hash:
81 if hhash != "":
81 if hhash != "":
82 ui.warn(_('%s: data corruption (expected %s, got %s)\n')
82 ui.warn(_('%s: data corruption (expected %s, got %s)\n')
83 % (filename, hash, hhash))
83 % (filename, hash, hhash))
84 util.unlink(storefilename + '.tmp')
84 util.unlink(storefilename + '.tmp')
85 missing.append(filename)
85 missing.append(filename)
86 continue
86 continue
87
87
88 util.rename(storefilename + '.tmp', storefilename)
88 util.rename(storefilename + '.tmp', storefilename)
89 lfutil.linktousercache(self.repo, hash)
89 lfutil.linktousercache(self.repo, hash)
90 success.append((filename, hhash))
90 success.append((filename, hhash))
91
91
92 ui.progress(_('getting largefiles'), None)
92 ui.progress(_('getting largefiles'), None)
93 return (success, missing)
93 return (success, missing)
94
94
95 def verify(self, revs, contents=False):
95 def verify(self, revs, contents=False):
96 '''Verify the existence (and, optionally, contents) of every big
96 '''Verify the existence (and, optionally, contents) of every big
97 file revision referenced by every changeset in revs.
97 file revision referenced by every changeset in revs.
98 Return 0 if all is well, non-zero on any errors.'''
98 Return 0 if all is well, non-zero on any errors.'''
99 write = self.ui.write
100 failed = False
99 failed = False
101
100
102 write(_('searching %d changesets for largefiles\n') % len(revs))
101 self.ui.status(_('searching %d changesets for largefiles\n') %
102 len(revs))
103 verified = set() # set of (filename, filenode) tuples
103 verified = set() # set of (filename, filenode) tuples
104
104
105 for rev in revs:
105 for rev in revs:
106 cctx = self.repo[rev]
106 cctx = self.repo[rev]
107 cset = "%d:%s" % (cctx.rev(), node.short(cctx.node()))
107 cset = "%d:%s" % (cctx.rev(), node.short(cctx.node()))
108
108
109 for standin in cctx:
109 for standin in cctx:
110 if self._verifyfile(cctx, cset, contents, standin, verified):
110 if self._verifyfile(cctx, cset, contents, standin, verified):
111 failed = True
111 failed = True
112
112
113 numrevs = len(verified)
113 numrevs = len(verified)
114 numlfiles = len(set([fname for (fname, fnode) in verified]))
114 numlfiles = len(set([fname for (fname, fnode) in verified]))
115 if contents:
115 if contents:
116 write(_('verified contents of %d revisions of %d largefiles\n')
116 self.ui.status(
117 % (numrevs, numlfiles))
117 _('verified contents of %d revisions of %d largefiles\n')
118 % (numrevs, numlfiles))
118 else:
119 else:
119 write(_('verified existence of %d revisions of %d largefiles\n')
120 self.ui.status(
120 % (numrevs, numlfiles))
121 _('verified existence of %d revisions of %d largefiles\n')
121
122 % (numrevs, numlfiles))
122 return int(failed)
123 return int(failed)
123
124
124 def _getfile(self, tmpfile, filename, hash):
125 def _getfile(self, tmpfile, filename, hash):
125 '''Fetch one revision of one file from the store and write it
126 '''Fetch one revision of one file from the store and write it
126 to tmpfile. Compute the hash of the file on-the-fly as it
127 to tmpfile. Compute the hash of the file on-the-fly as it
127 downloads and return the binary hash. Close tmpfile. Raise
128 downloads and return the binary hash. Close tmpfile. Raise
128 StoreError if unable to download the file (e.g. it does not
129 StoreError if unable to download the file (e.g. it does not
129 exist in the store).'''
130 exist in the store).'''
130 raise NotImplementedError('abstract method')
131 raise NotImplementedError('abstract method')
131
132
132 def _verifyfile(self, cctx, cset, contents, standin, verified):
133 def _verifyfile(self, cctx, cset, contents, standin, verified):
133 '''Perform the actual verification of a file in the store.
134 '''Perform the actual verification of a file in the store.
134 '''
135 '''
135 raise NotImplementedError('abstract method')
136 raise NotImplementedError('abstract method')
136
137
137 import localstore, wirestore
138 import localstore, wirestore
138
139
139 _storeprovider = {
140 _storeprovider = {
140 'file': [localstore.localstore],
141 'file': [localstore.localstore],
141 'http': [wirestore.wirestore],
142 'http': [wirestore.wirestore],
142 'https': [wirestore.wirestore],
143 'https': [wirestore.wirestore],
143 'ssh': [wirestore.wirestore],
144 'ssh': [wirestore.wirestore],
144 }
145 }
145
146
146 _scheme_re = re.compile(r'^([a-zA-Z0-9+-.]+)://')
147 _scheme_re = re.compile(r'^([a-zA-Z0-9+-.]+)://')
147
148
148 # During clone this function is passed the src's ui object
149 # During clone this function is passed the src's ui object
149 # but it needs the dest's ui object so it can read out of
150 # but it needs the dest's ui object so it can read out of
150 # the config file. Use repo.ui instead.
151 # the config file. Use repo.ui instead.
151 def _openstore(repo, remote=None, put=False):
152 def _openstore(repo, remote=None, put=False):
152 ui = repo.ui
153 ui = repo.ui
153
154
154 if not remote:
155 if not remote:
155 lfpullsource = getattr(repo, 'lfpullsource', None)
156 lfpullsource = getattr(repo, 'lfpullsource', None)
156 if lfpullsource:
157 if lfpullsource:
157 path = ui.expandpath(lfpullsource)
158 path = ui.expandpath(lfpullsource)
158 else:
159 else:
159 path = ui.expandpath('default-push', 'default')
160 path = ui.expandpath('default-push', 'default')
160
161
161 # ui.expandpath() leaves 'default-push' and 'default' alone if
162 # ui.expandpath() leaves 'default-push' and 'default' alone if
162 # they cannot be expanded: fallback to the empty string,
163 # they cannot be expanded: fallback to the empty string,
163 # meaning the current directory.
164 # meaning the current directory.
164 if path == 'default-push' or path == 'default':
165 if path == 'default-push' or path == 'default':
165 path = ''
166 path = ''
166 remote = repo
167 remote = repo
167 else:
168 else:
168 path, _branches = hg.parseurl(path)
169 path, _branches = hg.parseurl(path)
169 remote = hg.peer(repo, {}, path)
170 remote = hg.peer(repo, {}, path)
170
171
171 # The path could be a scheme so use Mercurial's normal functionality
172 # The path could be a scheme so use Mercurial's normal functionality
172 # to resolve the scheme to a repository and use its path
173 # to resolve the scheme to a repository and use its path
173 path = util.safehasattr(remote, 'url') and remote.url() or remote.path
174 path = util.safehasattr(remote, 'url') and remote.url() or remote.path
174
175
175 match = _scheme_re.match(path)
176 match = _scheme_re.match(path)
176 if not match: # regular filesystem path
177 if not match: # regular filesystem path
177 scheme = 'file'
178 scheme = 'file'
178 else:
179 else:
179 scheme = match.group(1)
180 scheme = match.group(1)
180
181
181 try:
182 try:
182 storeproviders = _storeprovider[scheme]
183 storeproviders = _storeprovider[scheme]
183 except KeyError:
184 except KeyError:
184 raise util.Abort(_('unsupported URL scheme %r') % scheme)
185 raise util.Abort(_('unsupported URL scheme %r') % scheme)
185
186
186 for classobj in storeproviders:
187 for classobj in storeproviders:
187 try:
188 try:
188 return classobj(ui, repo, remote)
189 return classobj(ui, repo, remote)
189 except lfutil.storeprotonotcapable:
190 except lfutil.storeprotonotcapable:
190 pass
191 pass
191
192
192 raise util.Abort(_('%s does not appear to be a largefile store') % path)
193 raise util.Abort(_('%s does not appear to be a largefile store') % path)
@@ -1,2087 +1,2081 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 verify --large --lfa --lfc
810 $ hg -R a-clone1 verify --large --lfa --lfc
811 checking changesets
811 checking changesets
812 checking manifests
812 checking manifests
813 crosschecking files in changesets and manifests
813 crosschecking files in changesets and manifests
814 checking files
814 checking files
815 10 files, 8 changesets, 24 total revisions
815 10 files, 8 changesets, 24 total revisions
816 searching 8 changesets for largefiles
816 searching 8 changesets for largefiles
817 verified contents of 13 revisions of 6 largefiles
817 verified contents of 13 revisions of 6 largefiles
818 $ hg -R a-clone1 sum
818 $ hg -R a-clone1 sum
819 parent: 1:ce8896473775
819 parent: 1:ce8896473775
820 edit files
820 edit files
821 branch: default
821 branch: default
822 commit: (clean)
822 commit: (clean)
823 update: 6 new changesets (update)
823 update: 6 new changesets (update)
824
824
825 $ rm "${USERCACHE}"/*
825 $ rm "${USERCACHE}"/*
826 $ hg clone --all-largefiles -U a a-clone-u
826 $ hg clone --all-largefiles -U a a-clone-u
827 11 additional largefiles cached
827 11 additional largefiles cached
828 $ hg -R a-clone-u sum
828 $ hg -R a-clone-u sum
829 parent: -1:000000000000 (no revision checked out)
829 parent: -1:000000000000 (no revision checked out)
830 branch: default
830 branch: default
831 commit: (clean)
831 commit: (clean)
832 update: 8 new changesets (update)
832 update: 8 new changesets (update)
833
833
834 $ mkdir xyz
834 $ mkdir xyz
835 $ cd xyz
835 $ cd xyz
836 $ hg clone ../a
836 $ hg clone ../a
837 destination directory: a
837 destination directory: a
838 updating to branch default
838 updating to branch default
839 getting changed largefiles
839 getting changed largefiles
840 3 largefiles updated, 0 removed
840 3 largefiles updated, 0 removed
841 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
841 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
842 $ cd ..
842 $ cd ..
843
843
844 Ensure base clone command argument validation
844 Ensure base clone command argument validation
845
845
846 $ hg clone -U -u 0 a a-clone-failure
846 $ hg clone -U -u 0 a a-clone-failure
847 abort: cannot specify both --noupdate and --updaterev
847 abort: cannot specify both --noupdate and --updaterev
848 [255]
848 [255]
849
849
850 $ hg clone --all-largefiles a ssh://localhost/a
850 $ hg clone --all-largefiles a ssh://localhost/a
851 abort: --all-largefiles is incompatible with non-local destination ssh://localhost/a
851 abort: --all-largefiles is incompatible with non-local destination ssh://localhost/a
852 [255]
852 [255]
853
853
854 Test pulling with --all-largefiles flag. Also test that the largefiles are
854 Test pulling with --all-largefiles flag. Also test that the largefiles are
855 downloaded from 'default' instead of 'default-push' when no source is specified
855 downloaded from 'default' instead of 'default-push' when no source is specified
856 (issue3584)
856 (issue3584)
857
857
858 $ rm -Rf a-backup
858 $ rm -Rf a-backup
859 $ hg clone -r 1 a a-backup
859 $ hg clone -r 1 a a-backup
860 adding changesets
860 adding changesets
861 adding manifests
861 adding manifests
862 adding file changes
862 adding file changes
863 added 2 changesets with 8 changes to 4 files
863 added 2 changesets with 8 changes to 4 files
864 updating to branch default
864 updating to branch default
865 getting changed largefiles
865 getting changed largefiles
866 2 largefiles updated, 0 removed
866 2 largefiles updated, 0 removed
867 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
867 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
868 $ rm "${USERCACHE}"/*
868 $ rm "${USERCACHE}"/*
869 $ cd a-backup
869 $ cd a-backup
870 $ hg pull --all-largefiles --config paths.default-push=bogus/path
870 $ hg pull --all-largefiles --config paths.default-push=bogus/path
871 pulling from $TESTTMP/a (glob)
871 pulling from $TESTTMP/a (glob)
872 searching for changes
872 searching for changes
873 adding changesets
873 adding changesets
874 adding manifests
874 adding manifests
875 adding file changes
875 adding file changes
876 added 6 changesets with 16 changes to 8 files
876 added 6 changesets with 16 changes to 8 files
877 (run 'hg update' to get a working copy)
877 (run 'hg update' to get a working copy)
878 caching new largefiles
878 caching new largefiles
879 3 largefiles cached
879 3 largefiles cached
880 3 additional largefiles cached
880 3 additional largefiles cached
881 $ cd ..
881 $ cd ..
882
882
883 Rebasing between two repositories does not revert largefiles to old
883 Rebasing between two repositories does not revert largefiles to old
884 revisions (this was a very bad bug that took a lot of work to fix).
884 revisions (this was a very bad bug that took a lot of work to fix).
885
885
886 $ hg clone a d
886 $ hg clone a d
887 updating to branch default
887 updating to branch default
888 getting changed largefiles
888 getting changed largefiles
889 3 largefiles updated, 0 removed
889 3 largefiles updated, 0 removed
890 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
890 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
891 $ cd b
891 $ cd b
892 $ echo large4-modified > sub/large4
892 $ echo large4-modified > sub/large4
893 $ echo normal3-modified > normal3
893 $ echo normal3-modified > normal3
894 $ hg commit -m "modify normal file and largefile in repo b"
894 $ hg commit -m "modify normal file and largefile in repo b"
895 Invoking status precommit hook
895 Invoking status precommit hook
896 M normal3
896 M normal3
897 M sub/large4
897 M sub/large4
898 $ cd ../d
898 $ cd ../d
899 $ echo large6-modified > sub2/large6
899 $ echo large6-modified > sub2/large6
900 $ echo normal4-modified > sub/normal4
900 $ echo normal4-modified > sub/normal4
901 $ hg commit -m "modify normal file largefile in repo d"
901 $ hg commit -m "modify normal file largefile in repo d"
902 Invoking status precommit hook
902 Invoking status precommit hook
903 M sub/normal4
903 M sub/normal4
904 M sub2/large6
904 M sub2/large6
905 $ cd ..
905 $ cd ..
906 $ hg clone d e
906 $ hg clone d e
907 updating to branch default
907 updating to branch default
908 getting changed largefiles
908 getting changed largefiles
909 3 largefiles updated, 0 removed
909 3 largefiles updated, 0 removed
910 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
910 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
911 $ cd d
911 $ cd d
912
912
913 More rebase testing, but also test that the largefiles are downloaded from
913 More rebase testing, but also test that the largefiles are downloaded from
914 'default' instead of 'default-push' when no source is specified (issue3584).
914 'default' instead of 'default-push' when no source is specified (issue3584).
915 The error messages go away if repo 'b' is created with --all-largefiles.
915 The error messages go away if repo 'b' is created with --all-largefiles.
916 $ hg pull --rebase --all-largefiles --config paths.default-push=bogus/path --config paths.default=../b
916 $ hg pull --rebase --all-largefiles --config paths.default-push=bogus/path --config paths.default=../b
917 pulling from $TESTTMP/b (glob)
917 pulling from $TESTTMP/b (glob)
918 searching for changes
918 searching for changes
919 adding changesets
919 adding changesets
920 adding manifests
920 adding manifests
921 adding file changes
921 adding file changes
922 added 1 changesets with 2 changes to 2 files (+1 heads)
922 added 1 changesets with 2 changes to 2 files (+1 heads)
923 Invoking status precommit hook
923 Invoking status precommit hook
924 M sub/normal4
924 M sub/normal4
925 M sub2/large6
925 M sub2/large6
926 saved backup bundle to $TESTTMP/d/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
926 saved backup bundle to $TESTTMP/d/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
927 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large3: can't get file locally (glob)
927 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large3: can't get file locally (glob)
928 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large4: can't get file locally (glob)
928 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large4: can't get file locally (glob)
929 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
929 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
930 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
930 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
931 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
931 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
932 error getting id 5f78770c0e77ba4287ad6ef3071c9bf9c379742f from url file:$TESTTMP/b for file large1: can't get file locally (glob)
932 error getting id 5f78770c0e77ba4287ad6ef3071c9bf9c379742f from url file:$TESTTMP/b for file large1: can't get file locally (glob)
933 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
933 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
934 error getting id 4669e532d5b2c093a78eca010077e708a071bb64 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
934 error getting id 4669e532d5b2c093a78eca010077e708a071bb64 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
935 error getting id 1deebade43c8c498a3c8daddac0244dc55d1331d from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
935 error getting id 1deebade43c8c498a3c8daddac0244dc55d1331d from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
936 0 additional largefiles cached
936 0 additional largefiles cached
937 9 largefiles failed to download
937 9 largefiles failed to download
938 nothing to rebase
938 nothing to rebase
939 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
939 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
940 9:598410d3eb9a modify normal file largefile in repo d
940 9:598410d3eb9a modify normal file largefile in repo d
941 8:a381d2c8c80e modify normal file and largefile in repo b
941 8:a381d2c8c80e modify normal file and largefile in repo b
942 7:daea875e9014 add/edit more largefiles
942 7:daea875e9014 add/edit more largefiles
943 6:4355d653f84f edit files yet again
943 6:4355d653f84f edit files yet again
944 5:9d5af5072dbd edit files again
944 5:9d5af5072dbd edit files again
945 4:74c02385b94c move files
945 4:74c02385b94c move files
946 3:9e8fbc4bce62 copy files
946 3:9e8fbc4bce62 copy files
947 2:51a0ae4d5864 remove files
947 2:51a0ae4d5864 remove files
948 1:ce8896473775 edit files
948 1:ce8896473775 edit files
949 0:30d30fe6a5be add files
949 0:30d30fe6a5be add files
950 $ cat normal3
950 $ cat normal3
951 normal3-modified
951 normal3-modified
952 $ cat sub/normal4
952 $ cat sub/normal4
953 normal4-modified
953 normal4-modified
954 $ cat sub/large4
954 $ cat sub/large4
955 large4-modified
955 large4-modified
956 $ cat sub2/large6
956 $ cat sub2/large6
957 large6-modified
957 large6-modified
958 $ cat sub2/large7
958 $ cat sub2/large7
959 large7
959 large7
960 $ cd ../e
960 $ cd ../e
961 $ hg pull ../b
961 $ hg pull ../b
962 pulling from ../b
962 pulling from ../b
963 searching for changes
963 searching for changes
964 adding changesets
964 adding changesets
965 adding manifests
965 adding manifests
966 adding file changes
966 adding file changes
967 added 1 changesets with 2 changes to 2 files (+1 heads)
967 added 1 changesets with 2 changes to 2 files (+1 heads)
968 (run 'hg heads' to see heads, 'hg merge' to merge)
968 (run 'hg heads' to see heads, 'hg merge' to merge)
969 caching new largefiles
969 caching new largefiles
970 0 largefiles cached
970 0 largefiles cached
971 $ hg rebase
971 $ hg rebase
972 Invoking status precommit hook
972 Invoking status precommit hook
973 M sub/normal4
973 M sub/normal4
974 M sub2/large6
974 M sub2/large6
975 saved backup bundle to $TESTTMP/e/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
975 saved backup bundle to $TESTTMP/e/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
976 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
976 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
977 9:598410d3eb9a modify normal file largefile in repo d
977 9:598410d3eb9a modify normal file largefile in repo d
978 8:a381d2c8c80e modify normal file and largefile in repo b
978 8:a381d2c8c80e modify normal file and largefile in repo b
979 7:daea875e9014 add/edit more largefiles
979 7:daea875e9014 add/edit more largefiles
980 6:4355d653f84f edit files yet again
980 6:4355d653f84f edit files yet again
981 5:9d5af5072dbd edit files again
981 5:9d5af5072dbd edit files again
982 4:74c02385b94c move files
982 4:74c02385b94c move files
983 3:9e8fbc4bce62 copy files
983 3:9e8fbc4bce62 copy files
984 2:51a0ae4d5864 remove files
984 2:51a0ae4d5864 remove files
985 1:ce8896473775 edit files
985 1:ce8896473775 edit files
986 0:30d30fe6a5be add files
986 0:30d30fe6a5be add files
987 $ cat normal3
987 $ cat normal3
988 normal3-modified
988 normal3-modified
989 $ cat sub/normal4
989 $ cat sub/normal4
990 normal4-modified
990 normal4-modified
991 $ cat sub/large4
991 $ cat sub/large4
992 large4-modified
992 large4-modified
993 $ cat sub2/large6
993 $ cat sub2/large6
994 large6-modified
994 large6-modified
995 $ cat sub2/large7
995 $ cat sub2/large7
996 large7
996 large7
997
997
998 Log on largefiles
998 Log on largefiles
999
999
1000 - same output
1000 - same output
1001 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub/large4
1001 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub/large4
1002 8:a381d2c8c80e modify normal file and largefile in repo b
1002 8:a381d2c8c80e modify normal file and largefile in repo b
1003 6:4355d653f84f edit files yet again
1003 6:4355d653f84f edit files yet again
1004 5:9d5af5072dbd edit files again
1004 5:9d5af5072dbd edit files again
1005 4:74c02385b94c move files
1005 4:74c02385b94c move files
1006 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub/large4
1006 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub/large4
1007 8:a381d2c8c80e modify normal file and largefile in repo b
1007 8:a381d2c8c80e modify normal file and largefile in repo b
1008 6:4355d653f84f edit files yet again
1008 6:4355d653f84f edit files yet again
1009 5:9d5af5072dbd edit files again
1009 5:9d5af5072dbd edit files again
1010 4:74c02385b94c move files
1010 4:74c02385b94c move files
1011
1011
1012 - .hglf only matches largefiles, without .hglf it matches 9 bco sub/normal
1012 - .hglf only matches largefiles, without .hglf it matches 9 bco sub/normal
1013 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub
1013 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub
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 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub
1020 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub
1021 9:598410d3eb9a modify normal file largefile in repo d
1021 9:598410d3eb9a modify normal file largefile in repo d
1022 8:a381d2c8c80e modify normal file and largefile in repo b
1022 8:a381d2c8c80e modify normal file and largefile in repo b
1023 6:4355d653f84f edit files yet again
1023 6:4355d653f84f edit files yet again
1024 5:9d5af5072dbd edit files again
1024 5:9d5af5072dbd edit files again
1025 4:74c02385b94c move files
1025 4:74c02385b94c move files
1026 1:ce8896473775 edit files
1026 1:ce8896473775 edit files
1027 0:30d30fe6a5be add files
1027 0:30d30fe6a5be add files
1028
1028
1029 - globbing gives same result
1029 - globbing gives same result
1030 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' 'glob:sub/*'
1030 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' 'glob:sub/*'
1031 9:598410d3eb9a modify normal file largefile in repo d
1031 9:598410d3eb9a modify normal file largefile in repo d
1032 8:a381d2c8c80e modify normal file and largefile in repo b
1032 8:a381d2c8c80e modify normal file and largefile in repo b
1033 6:4355d653f84f edit files yet again
1033 6:4355d653f84f edit files yet again
1034 5:9d5af5072dbd edit files again
1034 5:9d5af5072dbd edit files again
1035 4:74c02385b94c move files
1035 4:74c02385b94c move files
1036 1:ce8896473775 edit files
1036 1:ce8896473775 edit files
1037 0:30d30fe6a5be add files
1037 0:30d30fe6a5be add files
1038
1038
1039 Rollback on largefiles.
1039 Rollback on largefiles.
1040
1040
1041 $ echo large4-modified-again > sub/large4
1041 $ echo large4-modified-again > sub/large4
1042 $ hg commit -m "Modify large4 again"
1042 $ hg commit -m "Modify large4 again"
1043 Invoking status precommit hook
1043 Invoking status precommit hook
1044 M sub/large4
1044 M sub/large4
1045 $ hg rollback
1045 $ hg rollback
1046 repository tip rolled back to revision 9 (undo commit)
1046 repository tip rolled back to revision 9 (undo commit)
1047 working directory now based on revision 9
1047 working directory now based on revision 9
1048 $ hg st
1048 $ hg st
1049 M sub/large4
1049 M sub/large4
1050 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1050 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1051 9:598410d3eb9a modify normal file largefile in repo d
1051 9:598410d3eb9a modify normal file largefile in repo d
1052 8:a381d2c8c80e modify normal file and largefile in repo b
1052 8:a381d2c8c80e modify normal file and largefile in repo b
1053 7:daea875e9014 add/edit more largefiles
1053 7:daea875e9014 add/edit more largefiles
1054 6:4355d653f84f edit files yet again
1054 6:4355d653f84f edit files yet again
1055 5:9d5af5072dbd edit files again
1055 5:9d5af5072dbd edit files again
1056 4:74c02385b94c move files
1056 4:74c02385b94c move files
1057 3:9e8fbc4bce62 copy files
1057 3:9e8fbc4bce62 copy files
1058 2:51a0ae4d5864 remove files
1058 2:51a0ae4d5864 remove files
1059 1:ce8896473775 edit files
1059 1:ce8896473775 edit files
1060 0:30d30fe6a5be add files
1060 0:30d30fe6a5be add files
1061 $ cat sub/large4
1061 $ cat sub/large4
1062 large4-modified-again
1062 large4-modified-again
1063
1063
1064 "update --check" refuses to update with uncommitted changes.
1064 "update --check" refuses to update with uncommitted changes.
1065 $ hg update --check 8
1065 $ hg update --check 8
1066 abort: uncommitted local changes
1066 abort: uncommitted local changes
1067 [255]
1067 [255]
1068
1068
1069 "update --clean" leaves correct largefiles in working copy, even when there is
1069 "update --clean" leaves correct largefiles in working copy, even when there is
1070 .orig files from revert in .hglf.
1070 .orig files from revert in .hglf.
1071
1071
1072 $ echo mistake > sub2/large7
1072 $ echo mistake > sub2/large7
1073 $ hg revert sub2/large7
1073 $ hg revert sub2/large7
1074 $ hg -q update --clean -r null
1074 $ hg -q update --clean -r null
1075 $ hg update --clean
1075 $ hg update --clean
1076 getting changed largefiles
1076 getting changed largefiles
1077 3 largefiles updated, 0 removed
1077 3 largefiles updated, 0 removed
1078 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1078 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1079 $ cat normal3
1079 $ cat normal3
1080 normal3-modified
1080 normal3-modified
1081 $ cat sub/normal4
1081 $ cat sub/normal4
1082 normal4-modified
1082 normal4-modified
1083 $ cat sub/large4
1083 $ cat sub/large4
1084 large4-modified
1084 large4-modified
1085 $ cat sub2/large6
1085 $ cat sub2/large6
1086 large6-modified
1086 large6-modified
1087 $ cat sub2/large7
1087 $ cat sub2/large7
1088 large7
1088 large7
1089 $ cat sub2/large7.orig
1089 $ cat sub2/large7.orig
1090 mistake
1090 mistake
1091 $ cat .hglf/sub2/large7.orig
1091 $ cat .hglf/sub2/large7.orig
1092 9dbfb2c79b1c40981b258c3efa1b10b03f18ad31
1092 9dbfb2c79b1c40981b258c3efa1b10b03f18ad31
1093
1093
1094 demonstrate misfeature: .orig file is overwritten on every update -C,
1094 demonstrate misfeature: .orig file is overwritten on every update -C,
1095 also when clean:
1095 also when clean:
1096 $ hg update --clean
1096 $ hg update --clean
1097 getting changed largefiles
1097 getting changed largefiles
1098 0 largefiles updated, 0 removed
1098 0 largefiles updated, 0 removed
1099 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1099 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1100 $ cat sub2/large7.orig
1100 $ cat sub2/large7.orig
1101 large7
1101 large7
1102 $ rm sub2/large7.orig .hglf/sub2/large7.orig
1102 $ rm sub2/large7.orig .hglf/sub2/large7.orig
1103
1103
1104 Now "update check" is happy.
1104 Now "update check" is happy.
1105 $ hg update --check 8
1105 $ hg update --check 8
1106 getting changed largefiles
1106 getting changed largefiles
1107 1 largefiles updated, 0 removed
1107 1 largefiles updated, 0 removed
1108 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1108 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1109 $ hg update --check
1109 $ hg update --check
1110 getting changed largefiles
1110 getting changed largefiles
1111 1 largefiles updated, 0 removed
1111 1 largefiles updated, 0 removed
1112 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1112 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1113
1113
1114 Test removing empty largefiles directories on update
1114 Test removing empty largefiles directories on update
1115 $ test -d sub2 && echo "sub2 exists"
1115 $ test -d sub2 && echo "sub2 exists"
1116 sub2 exists
1116 sub2 exists
1117 $ hg update -q null
1117 $ hg update -q null
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 update -q
1120 $ hg update -q
1121
1121
1122 Test hg remove removes empty largefiles directories
1122 Test hg remove removes empty largefiles directories
1123 $ test -d sub2 && echo "sub2 exists"
1123 $ test -d sub2 && echo "sub2 exists"
1124 sub2 exists
1124 sub2 exists
1125 $ hg remove sub2/*
1125 $ hg remove sub2/*
1126 $ test -d sub2 && echo "error: sub2 should not exist anymore"
1126 $ test -d sub2 && echo "error: sub2 should not exist anymore"
1127 [1]
1127 [1]
1128 $ hg revert sub2/large6 sub2/large7
1128 $ hg revert sub2/large6 sub2/large7
1129
1129
1130 "revert" works on largefiles (and normal files too).
1130 "revert" works on largefiles (and normal files too).
1131 $ echo hack3 >> normal3
1131 $ echo hack3 >> normal3
1132 $ echo hack4 >> sub/normal4
1132 $ echo hack4 >> sub/normal4
1133 $ echo hack4 >> sub/large4
1133 $ echo hack4 >> sub/large4
1134 $ rm sub2/large6
1134 $ rm sub2/large6
1135 $ hg revert sub2/large6
1135 $ hg revert sub2/large6
1136 $ hg rm sub2/large6
1136 $ hg rm sub2/large6
1137 $ echo new >> sub2/large8
1137 $ echo new >> sub2/large8
1138 $ hg add --large sub2/large8
1138 $ hg add --large sub2/large8
1139 # XXX we don't really want to report that we're reverting the standin;
1139 # XXX we don't really want to report that we're reverting the standin;
1140 # that's just an implementation detail. But I don't see an obvious fix. ;-(
1140 # that's just an implementation detail. But I don't see an obvious fix. ;-(
1141 $ hg revert sub
1141 $ hg revert sub
1142 reverting .hglf/sub/large4 (glob)
1142 reverting .hglf/sub/large4 (glob)
1143 reverting sub/normal4 (glob)
1143 reverting sub/normal4 (glob)
1144 $ hg status
1144 $ hg status
1145 M normal3
1145 M normal3
1146 A sub2/large8
1146 A sub2/large8
1147 R sub2/large6
1147 R sub2/large6
1148 ? sub/large4.orig
1148 ? sub/large4.orig
1149 ? sub/normal4.orig
1149 ? sub/normal4.orig
1150 $ cat sub/normal4
1150 $ cat sub/normal4
1151 normal4-modified
1151 normal4-modified
1152 $ cat sub/large4
1152 $ cat sub/large4
1153 large4-modified
1153 large4-modified
1154 $ hg revert -a --no-backup
1154 $ hg revert -a --no-backup
1155 undeleting .hglf/sub2/large6 (glob)
1155 undeleting .hglf/sub2/large6 (glob)
1156 forgetting .hglf/sub2/large8 (glob)
1156 forgetting .hglf/sub2/large8 (glob)
1157 reverting normal3
1157 reverting normal3
1158 $ hg status
1158 $ hg status
1159 ? sub/large4.orig
1159 ? sub/large4.orig
1160 ? sub/normal4.orig
1160 ? sub/normal4.orig
1161 ? sub2/large8
1161 ? sub2/large8
1162 $ cat normal3
1162 $ cat normal3
1163 normal3-modified
1163 normal3-modified
1164 $ cat sub2/large6
1164 $ cat sub2/large6
1165 large6-modified
1165 large6-modified
1166 $ rm sub/*.orig sub2/large8
1166 $ rm sub/*.orig sub2/large8
1167
1167
1168 revert some files to an older revision
1168 revert some files to an older revision
1169 $ hg revert --no-backup -r 8 sub2
1169 $ hg revert --no-backup -r 8 sub2
1170 reverting .hglf/sub2/large6 (glob)
1170 reverting .hglf/sub2/large6 (glob)
1171 $ cat sub2/large6
1171 $ cat sub2/large6
1172 large6
1172 large6
1173 $ hg revert --no-backup -C -r '.^' sub2
1173 $ hg revert --no-backup -C -r '.^' sub2
1174 reverting .hglf/sub2/large6 (glob)
1174 reverting .hglf/sub2/large6 (glob)
1175 $ hg revert --no-backup sub2
1175 $ hg revert --no-backup sub2
1176 reverting .hglf/sub2/large6 (glob)
1176 reverting .hglf/sub2/large6 (glob)
1177 $ hg status
1177 $ hg status
1178
1178
1179 "verify --large" actually verifies largefiles
1179 "verify --large" actually verifies largefiles
1180
1180
1181 - Where Do We Come From? What Are We? Where Are We Going?
1181 - Where Do We Come From? What Are We? Where Are We Going?
1182 $ pwd
1182 $ pwd
1183 $TESTTMP/e
1183 $TESTTMP/e
1184 $ hg paths
1184 $ hg paths
1185 default = $TESTTMP/d (glob)
1185 default = $TESTTMP/d (glob)
1186
1186
1187 $ hg verify --large
1187 $ hg verify --large
1188 checking changesets
1188 checking changesets
1189 checking manifests
1189 checking manifests
1190 crosschecking files in changesets and manifests
1190 crosschecking files in changesets and manifests
1191 checking files
1191 checking files
1192 10 files, 10 changesets, 28 total revisions
1192 10 files, 10 changesets, 28 total revisions
1193 searching 1 changesets for largefiles
1193 searching 1 changesets for largefiles
1194 verified existence of 3 revisions of 3 largefiles
1194 verified existence of 3 revisions of 3 largefiles
1195
1195
1196 - introduce missing blob in local store repo and make sure that this is caught:
1196 - introduce missing blob in local store repo and make sure that this is caught:
1197 $ mv $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928 .
1197 $ mv $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928 .
1198 $ hg verify --large
1198 $ hg verify --large
1199 checking changesets
1199 checking changesets
1200 checking manifests
1200 checking manifests
1201 crosschecking files in changesets and manifests
1201 crosschecking files in changesets and manifests
1202 checking files
1202 checking files
1203 10 files, 10 changesets, 28 total revisions
1203 10 files, 10 changesets, 28 total revisions
1204 searching 1 changesets for largefiles
1204 searching 1 changesets for largefiles
1205 changeset 9:598410d3eb9a: sub/large4 references missing $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1205 changeset 9:598410d3eb9a: sub/large4 references missing $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1206 verified existence of 3 revisions of 3 largefiles
1206 verified existence of 3 revisions of 3 largefiles
1207 [1]
1207 [1]
1208
1208
1209 - introduce corruption and make sure that it is caught when checking content:
1209 - introduce corruption and make sure that it is caught when checking content:
1210 $ echo '5 cents' > $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1210 $ echo '5 cents' > $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1211 $ hg verify -q --large --lfc
1211 $ hg verify -q --large --lfc
1212 searching 1 changesets for largefiles
1213 changeset 9:598410d3eb9a: sub/large4 references corrupted $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1212 changeset 9:598410d3eb9a: sub/large4 references corrupted $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1214 verified contents of 3 revisions of 3 largefiles
1215 [1]
1213 [1]
1216
1214
1217 - cleanup
1215 - cleanup
1218 $ mv e166e74c7303192238d60af5a9c4ce9bef0b7928 $TESTTMP/d/.hg/largefiles/
1216 $ mv e166e74c7303192238d60af5a9c4ce9bef0b7928 $TESTTMP/d/.hg/largefiles/
1219
1217
1220 - verifying all revisions will fail because we didn't clone all largefiles to d:
1218 - verifying all revisions will fail because we didn't clone all largefiles to d:
1221 $ echo 'T-shirt' > $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1219 $ echo 'T-shirt' > $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1222 $ hg verify -q --large --lfa --lfc
1220 $ hg verify -q --large --lfa --lfc
1223 searching 10 changesets for largefiles
1224 changeset 0:30d30fe6a5be: large1 references missing $TESTTMP/d/.hg/largefiles/4669e532d5b2c093a78eca010077e708a071bb64
1221 changeset 0:30d30fe6a5be: large1 references missing $TESTTMP/d/.hg/largefiles/4669e532d5b2c093a78eca010077e708a071bb64
1225 changeset 0:30d30fe6a5be: sub/large2 references missing $TESTTMP/d/.hg/largefiles/1deebade43c8c498a3c8daddac0244dc55d1331d
1222 changeset 0:30d30fe6a5be: sub/large2 references missing $TESTTMP/d/.hg/largefiles/1deebade43c8c498a3c8daddac0244dc55d1331d
1226 changeset 1:ce8896473775: large1 references missing $TESTTMP/d/.hg/largefiles/5f78770c0e77ba4287ad6ef3071c9bf9c379742f
1223 changeset 1:ce8896473775: large1 references missing $TESTTMP/d/.hg/largefiles/5f78770c0e77ba4287ad6ef3071c9bf9c379742f
1227 changeset 1:ce8896473775: sub/large2 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1224 changeset 1:ce8896473775: sub/large2 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1228 changeset 3:9e8fbc4bce62: large1 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1225 changeset 3:9e8fbc4bce62: large1 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1229 changeset 4:74c02385b94c: large3 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1226 changeset 4:74c02385b94c: large3 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1230 changeset 4:74c02385b94c: sub/large4 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1227 changeset 4:74c02385b94c: sub/large4 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1231 verified contents of 15 revisions of 6 largefiles
1232 [1]
1228 [1]
1233
1229
1234 - cleanup
1230 - cleanup
1235 $ rm $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1231 $ rm $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1236
1232
1237 Merging does not revert to old versions of largefiles and also check
1233 Merging does not revert to old versions of largefiles and also check
1238 that merging after having pulled from a non-default remote works
1234 that merging after having pulled from a non-default remote works
1239 correctly.
1235 correctly.
1240
1236
1241 $ cd ..
1237 $ cd ..
1242 $ hg clone -r 7 e temp
1238 $ hg clone -r 7 e temp
1243 adding changesets
1239 adding changesets
1244 adding manifests
1240 adding manifests
1245 adding file changes
1241 adding file changes
1246 added 8 changesets with 24 changes to 10 files
1242 added 8 changesets with 24 changes to 10 files
1247 updating to branch default
1243 updating to branch default
1248 getting changed largefiles
1244 getting changed largefiles
1249 3 largefiles updated, 0 removed
1245 3 largefiles updated, 0 removed
1250 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1246 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1251 $ hg clone temp f
1247 $ hg clone temp f
1252 updating to branch default
1248 updating to branch default
1253 getting changed largefiles
1249 getting changed largefiles
1254 3 largefiles updated, 0 removed
1250 3 largefiles updated, 0 removed
1255 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1251 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1256 # Delete the largefiles in the largefiles system cache so that we have an
1252 # Delete the largefiles in the largefiles system cache so that we have an
1257 # opportunity to test that caching after a pull works.
1253 # opportunity to test that caching after a pull works.
1258 $ rm "${USERCACHE}"/*
1254 $ rm "${USERCACHE}"/*
1259 $ cd f
1255 $ cd f
1260 $ echo "large4-merge-test" > sub/large4
1256 $ echo "large4-merge-test" > sub/large4
1261 $ hg commit -m "Modify large4 to test merge"
1257 $ hg commit -m "Modify large4 to test merge"
1262 Invoking status precommit hook
1258 Invoking status precommit hook
1263 M sub/large4
1259 M sub/large4
1264 $ hg pull ../e
1260 $ hg pull ../e
1265 pulling from ../e
1261 pulling from ../e
1266 searching for changes
1262 searching for changes
1267 adding changesets
1263 adding changesets
1268 adding manifests
1264 adding manifests
1269 adding file changes
1265 adding file changes
1270 added 2 changesets with 4 changes to 4 files (+1 heads)
1266 added 2 changesets with 4 changes to 4 files (+1 heads)
1271 (run 'hg heads' to see heads, 'hg merge' to merge)
1267 (run 'hg heads' to see heads, 'hg merge' to merge)
1272 caching new largefiles
1268 caching new largefiles
1273 2 largefiles cached
1269 2 largefiles cached
1274 $ hg merge
1270 $ hg merge
1275 merging sub/large4
1271 merging sub/large4
1276 largefile sub/large4 has a merge conflict
1272 largefile sub/large4 has a merge conflict
1277 keep (l)ocal or take (o)ther? l
1273 keep (l)ocal or take (o)ther? l
1278 3 files updated, 1 files merged, 0 files removed, 0 files unresolved
1274 3 files updated, 1 files merged, 0 files removed, 0 files unresolved
1279 (branch merge, don't forget to commit)
1275 (branch merge, don't forget to commit)
1280 getting changed largefiles
1276 getting changed largefiles
1281 1 largefiles updated, 0 removed
1277 1 largefiles updated, 0 removed
1282 $ hg commit -m "Merge repos e and f"
1278 $ hg commit -m "Merge repos e and f"
1283 Invoking status precommit hook
1279 Invoking status precommit hook
1284 M normal3
1280 M normal3
1285 M sub/normal4
1281 M sub/normal4
1286 M sub2/large6
1282 M sub2/large6
1287 $ cat normal3
1283 $ cat normal3
1288 normal3-modified
1284 normal3-modified
1289 $ cat sub/normal4
1285 $ cat sub/normal4
1290 normal4-modified
1286 normal4-modified
1291 $ cat sub/large4
1287 $ cat sub/large4
1292 large4-merge-test
1288 large4-merge-test
1293 $ cat sub2/large6
1289 $ cat sub2/large6
1294 large6-modified
1290 large6-modified
1295 $ cat sub2/large7
1291 $ cat sub2/large7
1296 large7
1292 large7
1297
1293
1298 Test status after merging with a branch that introduces a new largefile:
1294 Test status after merging with a branch that introduces a new largefile:
1299
1295
1300 $ echo large > large
1296 $ echo large > large
1301 $ hg add --large large
1297 $ hg add --large large
1302 $ hg commit -m 'add largefile'
1298 $ hg commit -m 'add largefile'
1303 Invoking status precommit hook
1299 Invoking status precommit hook
1304 A large
1300 A large
1305 $ hg update -q ".^"
1301 $ hg update -q ".^"
1306 $ echo change >> normal3
1302 $ echo change >> normal3
1307 $ hg commit -m 'some change'
1303 $ hg commit -m 'some change'
1308 Invoking status precommit hook
1304 Invoking status precommit hook
1309 M normal3
1305 M normal3
1310 created new head
1306 created new head
1311 $ hg merge
1307 $ hg merge
1312 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1308 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1313 (branch merge, don't forget to commit)
1309 (branch merge, don't forget to commit)
1314 getting changed largefiles
1310 getting changed largefiles
1315 1 largefiles updated, 0 removed
1311 1 largefiles updated, 0 removed
1316 $ hg status
1312 $ hg status
1317 M large
1313 M large
1318
1314
1319 - make sure update of merge with removed largefiles fails as expected
1315 - make sure update of merge with removed largefiles fails as expected
1320 $ hg rm sub2/large6
1316 $ hg rm sub2/large6
1321 $ hg up -r.
1317 $ hg up -r.
1322 abort: outstanding uncommitted merges
1318 abort: outstanding uncommitted merges
1323 [255]
1319 [255]
1324
1320
1325 - revert should be able to revert files introduced in a pending merge
1321 - revert should be able to revert files introduced in a pending merge
1326 $ hg revert --all -r .
1322 $ hg revert --all -r .
1327 removing .hglf/large (glob)
1323 removing .hglf/large (glob)
1328 undeleting .hglf/sub2/large6 (glob)
1324 undeleting .hglf/sub2/large6 (glob)
1329
1325
1330 Test that a normal file and a largefile with the same name and path cannot
1326 Test that a normal file and a largefile with the same name and path cannot
1331 coexist.
1327 coexist.
1332
1328
1333 $ rm sub2/large7
1329 $ rm sub2/large7
1334 $ echo "largeasnormal" > sub2/large7
1330 $ echo "largeasnormal" > sub2/large7
1335 $ hg add sub2/large7
1331 $ hg add sub2/large7
1336 sub2/large7 already a largefile
1332 sub2/large7 already a largefile
1337
1333
1338 Test that transplanting a largefile change works correctly.
1334 Test that transplanting a largefile change works correctly.
1339
1335
1340 $ cd ..
1336 $ cd ..
1341 $ hg clone -r 8 d g
1337 $ hg clone -r 8 d g
1342 adding changesets
1338 adding changesets
1343 adding manifests
1339 adding manifests
1344 adding file changes
1340 adding file changes
1345 added 9 changesets with 26 changes to 10 files
1341 added 9 changesets with 26 changes to 10 files
1346 updating to branch default
1342 updating to branch default
1347 getting changed largefiles
1343 getting changed largefiles
1348 3 largefiles updated, 0 removed
1344 3 largefiles updated, 0 removed
1349 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1345 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1350 $ cd g
1346 $ cd g
1351 $ hg transplant -s ../d 598410d3eb9a
1347 $ hg transplant -s ../d 598410d3eb9a
1352 searching for changes
1348 searching for changes
1353 searching for changes
1349 searching for changes
1354 adding changesets
1350 adding changesets
1355 adding manifests
1351 adding manifests
1356 adding file changes
1352 adding file changes
1357 added 1 changesets with 2 changes to 2 files
1353 added 1 changesets with 2 changes to 2 files
1358 getting changed largefiles
1354 getting changed largefiles
1359 1 largefiles updated, 0 removed
1355 1 largefiles updated, 0 removed
1360 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1356 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1361 9:598410d3eb9a modify normal file largefile in repo d
1357 9:598410d3eb9a modify normal file largefile in repo d
1362 8:a381d2c8c80e modify normal file and largefile in repo b
1358 8:a381d2c8c80e modify normal file and largefile in repo b
1363 7:daea875e9014 add/edit more largefiles
1359 7:daea875e9014 add/edit more largefiles
1364 6:4355d653f84f edit files yet again
1360 6:4355d653f84f edit files yet again
1365 5:9d5af5072dbd edit files again
1361 5:9d5af5072dbd edit files again
1366 4:74c02385b94c move files
1362 4:74c02385b94c move files
1367 3:9e8fbc4bce62 copy files
1363 3:9e8fbc4bce62 copy files
1368 2:51a0ae4d5864 remove files
1364 2:51a0ae4d5864 remove files
1369 1:ce8896473775 edit files
1365 1:ce8896473775 edit files
1370 0:30d30fe6a5be add files
1366 0:30d30fe6a5be add files
1371 $ cat normal3
1367 $ cat normal3
1372 normal3-modified
1368 normal3-modified
1373 $ cat sub/normal4
1369 $ cat sub/normal4
1374 normal4-modified
1370 normal4-modified
1375 $ cat sub/large4
1371 $ cat sub/large4
1376 large4-modified
1372 large4-modified
1377 $ cat sub2/large6
1373 $ cat sub2/large6
1378 large6-modified
1374 large6-modified
1379 $ cat sub2/large7
1375 $ cat sub2/large7
1380 large7
1376 large7
1381
1377
1382 Cat a largefile
1378 Cat a largefile
1383 $ hg cat normal3
1379 $ hg cat normal3
1384 normal3-modified
1380 normal3-modified
1385 $ hg cat sub/large4
1381 $ hg cat sub/large4
1386 large4-modified
1382 large4-modified
1387 $ rm "${USERCACHE}"/*
1383 $ rm "${USERCACHE}"/*
1388 $ hg cat -r a381d2c8c80e -o cat.out sub/large4
1384 $ hg cat -r a381d2c8c80e -o cat.out sub/large4
1389 $ cat cat.out
1385 $ cat cat.out
1390 large4-modified
1386 large4-modified
1391 $ rm cat.out
1387 $ rm cat.out
1392 $ hg cat -r a381d2c8c80e normal3
1388 $ hg cat -r a381d2c8c80e normal3
1393 normal3-modified
1389 normal3-modified
1394 $ hg cat -r '.^' normal3
1390 $ hg cat -r '.^' normal3
1395 normal3-modified
1391 normal3-modified
1396 $ hg cat -r '.^' sub/large4 doesntexist
1392 $ hg cat -r '.^' sub/large4 doesntexist
1397 large4-modified
1393 large4-modified
1398 doesntexist: no such file in rev a381d2c8c80e
1394 doesntexist: no such file in rev a381d2c8c80e
1399 [1]
1395 [1]
1400
1396
1401 Test that renaming a largefile results in correct output for status
1397 Test that renaming a largefile results in correct output for status
1402
1398
1403 $ hg rename sub/large4 large4-renamed
1399 $ hg rename sub/large4 large4-renamed
1404 $ hg commit -m "test rename output"
1400 $ hg commit -m "test rename output"
1405 Invoking status precommit hook
1401 Invoking status precommit hook
1406 A large4-renamed
1402 A large4-renamed
1407 R sub/large4
1403 R sub/large4
1408 $ cat large4-renamed
1404 $ cat large4-renamed
1409 large4-modified
1405 large4-modified
1410 $ cd sub2
1406 $ cd sub2
1411 $ hg rename large6 large6-renamed
1407 $ hg rename large6 large6-renamed
1412 $ hg st
1408 $ hg st
1413 A sub2/large6-renamed
1409 A sub2/large6-renamed
1414 R sub2/large6
1410 R sub2/large6
1415 $ cd ..
1411 $ cd ..
1416
1412
1417 Test --normal flag
1413 Test --normal flag
1418
1414
1419 $ dd if=/dev/zero bs=2k count=11k > new-largefile 2> /dev/null
1415 $ dd if=/dev/zero bs=2k count=11k > new-largefile 2> /dev/null
1420 $ hg add --normal --large new-largefile
1416 $ hg add --normal --large new-largefile
1421 abort: --normal cannot be used with --large
1417 abort: --normal cannot be used with --large
1422 [255]
1418 [255]
1423 $ hg add --normal new-largefile
1419 $ hg add --normal new-largefile
1424 new-largefile: up to 69 MB of RAM may be required to manage this file
1420 new-largefile: up to 69 MB of RAM may be required to manage this file
1425 (use 'hg revert new-largefile' to cancel the pending addition)
1421 (use 'hg revert new-largefile' to cancel the pending addition)
1426 $ cd ..
1422 $ cd ..
1427
1423
1428 #if serve
1424 #if serve
1429 vanilla clients not locked out from largefiles servers on vanilla repos
1425 vanilla clients not locked out from largefiles servers on vanilla repos
1430 $ mkdir r1
1426 $ mkdir r1
1431 $ cd r1
1427 $ cd r1
1432 $ hg init
1428 $ hg init
1433 $ echo c1 > f1
1429 $ echo c1 > f1
1434 $ hg add f1
1430 $ hg add f1
1435 $ hg commit -m "m1"
1431 $ hg commit -m "m1"
1436 Invoking status precommit hook
1432 Invoking status precommit hook
1437 A f1
1433 A f1
1438 $ cd ..
1434 $ cd ..
1439 $ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid
1435 $ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid
1440 $ cat hg.pid >> $DAEMON_PIDS
1436 $ cat hg.pid >> $DAEMON_PIDS
1441 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2
1437 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2
1442 requesting all changes
1438 requesting all changes
1443 adding changesets
1439 adding changesets
1444 adding manifests
1440 adding manifests
1445 adding file changes
1441 adding file changes
1446 added 1 changesets with 1 changes to 1 files
1442 added 1 changesets with 1 changes to 1 files
1447 updating to branch default
1443 updating to branch default
1448 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1444 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1449
1445
1450 largefiles clients still work with vanilla servers
1446 largefiles clients still work with vanilla servers
1451 $ hg --config extensions.largefiles=! serve -R r1 -d -p $HGPORT1 --pid-file hg.pid
1447 $ hg --config extensions.largefiles=! serve -R r1 -d -p $HGPORT1 --pid-file hg.pid
1452 $ cat hg.pid >> $DAEMON_PIDS
1448 $ cat hg.pid >> $DAEMON_PIDS
1453 $ hg clone http://localhost:$HGPORT1 r3
1449 $ hg clone http://localhost:$HGPORT1 r3
1454 requesting all changes
1450 requesting all changes
1455 adding changesets
1451 adding changesets
1456 adding manifests
1452 adding manifests
1457 adding file changes
1453 adding file changes
1458 added 1 changesets with 1 changes to 1 files
1454 added 1 changesets with 1 changes to 1 files
1459 updating to branch default
1455 updating to branch default
1460 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1456 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1461 #endif
1457 #endif
1462
1458
1463
1459
1464 vanilla clients locked out from largefiles http repos
1460 vanilla clients locked out from largefiles http repos
1465 $ mkdir r4
1461 $ mkdir r4
1466 $ cd r4
1462 $ cd r4
1467 $ hg init
1463 $ hg init
1468 $ echo c1 > f1
1464 $ echo c1 > f1
1469 $ hg add --large f1
1465 $ hg add --large f1
1470 $ hg commit -m "m1"
1466 $ hg commit -m "m1"
1471 Invoking status precommit hook
1467 Invoking status precommit hook
1472 A f1
1468 A f1
1473 $ cd ..
1469 $ cd ..
1474
1470
1475 largefiles can be pushed locally (issue3583)
1471 largefiles can be pushed locally (issue3583)
1476 $ hg init dest
1472 $ hg init dest
1477 $ cd r4
1473 $ cd r4
1478 $ hg outgoing ../dest
1474 $ hg outgoing ../dest
1479 comparing with ../dest
1475 comparing with ../dest
1480 searching for changes
1476 searching for changes
1481 changeset: 0:639881c12b4c
1477 changeset: 0:639881c12b4c
1482 tag: tip
1478 tag: tip
1483 user: test
1479 user: test
1484 date: Thu Jan 01 00:00:00 1970 +0000
1480 date: Thu Jan 01 00:00:00 1970 +0000
1485 summary: m1
1481 summary: m1
1486
1482
1487 $ hg push ../dest
1483 $ hg push ../dest
1488 pushing to ../dest
1484 pushing to ../dest
1489 searching for changes
1485 searching for changes
1490 searching for changes
1486 searching for changes
1491 adding changesets
1487 adding changesets
1492 adding manifests
1488 adding manifests
1493 adding file changes
1489 adding file changes
1494 added 1 changesets with 1 changes to 1 files
1490 added 1 changesets with 1 changes to 1 files
1495
1491
1496 exit code with nothing outgoing (issue3611)
1492 exit code with nothing outgoing (issue3611)
1497 $ hg outgoing ../dest
1493 $ hg outgoing ../dest
1498 comparing with ../dest
1494 comparing with ../dest
1499 searching for changes
1495 searching for changes
1500 no changes found
1496 no changes found
1501 [1]
1497 [1]
1502 $ cd ..
1498 $ cd ..
1503
1499
1504 #if serve
1500 #if serve
1505 $ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid
1501 $ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid
1506 $ cat hg.pid >> $DAEMON_PIDS
1502 $ cat hg.pid >> $DAEMON_PIDS
1507 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5
1503 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5
1508 abort: remote error:
1504 abort: remote error:
1509
1505
1510 This repository uses the largefiles extension.
1506 This repository uses the largefiles extension.
1511
1507
1512 Please enable it in your Mercurial config file.
1508 Please enable it in your Mercurial config file.
1513 [255]
1509 [255]
1514
1510
1515 used all HGPORTs, kill all daemons
1511 used all HGPORTs, kill all daemons
1516 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1512 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1517 #endif
1513 #endif
1518
1514
1519 vanilla clients locked out from largefiles ssh repos
1515 vanilla clients locked out from largefiles ssh repos
1520 $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5
1516 $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5
1521 abort: remote error:
1517 abort: remote error:
1522
1518
1523 This repository uses the largefiles extension.
1519 This repository uses the largefiles extension.
1524
1520
1525 Please enable it in your Mercurial config file.
1521 Please enable it in your Mercurial config file.
1526 [255]
1522 [255]
1527
1523
1528 #if serve
1524 #if serve
1529
1525
1530 largefiles clients refuse to push largefiles repos to vanilla servers
1526 largefiles clients refuse to push largefiles repos to vanilla servers
1531 $ mkdir r6
1527 $ mkdir r6
1532 $ cd r6
1528 $ cd r6
1533 $ hg init
1529 $ hg init
1534 $ echo c1 > f1
1530 $ echo c1 > f1
1535 $ hg add f1
1531 $ hg add f1
1536 $ hg commit -m "m1"
1532 $ hg commit -m "m1"
1537 Invoking status precommit hook
1533 Invoking status precommit hook
1538 A f1
1534 A f1
1539 $ cat >> .hg/hgrc <<!
1535 $ cat >> .hg/hgrc <<!
1540 > [web]
1536 > [web]
1541 > push_ssl = false
1537 > push_ssl = false
1542 > allow_push = *
1538 > allow_push = *
1543 > !
1539 > !
1544 $ cd ..
1540 $ cd ..
1545 $ hg clone r6 r7
1541 $ hg clone r6 r7
1546 updating to branch default
1542 updating to branch default
1547 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1543 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1548 $ cd r7
1544 $ cd r7
1549 $ echo c2 > f2
1545 $ echo c2 > f2
1550 $ hg add --large f2
1546 $ hg add --large f2
1551 $ hg commit -m "m2"
1547 $ hg commit -m "m2"
1552 Invoking status precommit hook
1548 Invoking status precommit hook
1553 A f2
1549 A f2
1554 $ hg --config extensions.largefiles=! -R ../r6 serve -d -p $HGPORT --pid-file ../hg.pid
1550 $ hg --config extensions.largefiles=! -R ../r6 serve -d -p $HGPORT --pid-file ../hg.pid
1555 $ cat ../hg.pid >> $DAEMON_PIDS
1551 $ cat ../hg.pid >> $DAEMON_PIDS
1556 $ hg push http://localhost:$HGPORT
1552 $ hg push http://localhost:$HGPORT
1557 pushing to http://localhost:$HGPORT/
1553 pushing to http://localhost:$HGPORT/
1558 searching for changes
1554 searching for changes
1559 abort: http://localhost:$HGPORT/ does not appear to be a largefile store
1555 abort: http://localhost:$HGPORT/ does not appear to be a largefile store
1560 [255]
1556 [255]
1561 $ cd ..
1557 $ cd ..
1562
1558
1563 putlfile errors are shown (issue3123)
1559 putlfile errors are shown (issue3123)
1564 Corrupt the cached largefile in r7 and move it out of the servers usercache
1560 Corrupt the cached largefile in r7 and move it out of the servers usercache
1565 $ mv r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 .
1561 $ mv r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 .
1566 $ echo 'client side corruption' > r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1562 $ echo 'client side corruption' > r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1567 $ rm "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8"
1563 $ rm "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8"
1568 $ hg init empty
1564 $ hg init empty
1569 $ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \
1565 $ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \
1570 > --config 'web.allow_push=*' --config web.push_ssl=False
1566 > --config 'web.allow_push=*' --config web.push_ssl=False
1571 $ cat hg.pid >> $DAEMON_PIDS
1567 $ cat hg.pid >> $DAEMON_PIDS
1572 $ hg push -R r7 http://localhost:$HGPORT1
1568 $ hg push -R r7 http://localhost:$HGPORT1
1573 pushing to http://localhost:$HGPORT1/
1569 pushing to http://localhost:$HGPORT1/
1574 searching for changes
1570 searching for changes
1575 remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash
1571 remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash
1576 abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob)
1572 abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob)
1577 [255]
1573 [255]
1578 $ mv 4cdac4d8b084d0b599525cf732437fb337d422a8 r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1574 $ mv 4cdac4d8b084d0b599525cf732437fb337d422a8 r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1579 Push of file that exists on server but is corrupted - magic healing would be nice ... but too magic
1575 Push of file that exists on server but is corrupted - magic healing would be nice ... but too magic
1580 $ echo "server side corruption" > empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1576 $ echo "server side corruption" > empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1581 $ hg push -R r7 http://localhost:$HGPORT1
1577 $ hg push -R r7 http://localhost:$HGPORT1
1582 pushing to http://localhost:$HGPORT1/
1578 pushing to http://localhost:$HGPORT1/
1583 searching for changes
1579 searching for changes
1584 searching for changes
1580 searching for changes
1585 remote: adding changesets
1581 remote: adding changesets
1586 remote: adding manifests
1582 remote: adding manifests
1587 remote: adding file changes
1583 remote: adding file changes
1588 remote: added 2 changesets with 2 changes to 2 files
1584 remote: added 2 changesets with 2 changes to 2 files
1589 $ cat empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1585 $ cat empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1590 server side corruption
1586 server side corruption
1591 $ rm -rf empty
1587 $ rm -rf empty
1592
1588
1593 Push a largefiles repository to a served empty repository
1589 Push a largefiles repository to a served empty repository
1594 $ hg init r8
1590 $ hg init r8
1595 $ echo c3 > r8/f1
1591 $ echo c3 > r8/f1
1596 $ hg add --large r8/f1 -R r8
1592 $ hg add --large r8/f1 -R r8
1597 $ hg commit -m "m1" -R r8
1593 $ hg commit -m "m1" -R r8
1598 Invoking status precommit hook
1594 Invoking status precommit hook
1599 A f1
1595 A f1
1600 $ hg init empty
1596 $ hg init empty
1601 $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
1597 $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
1602 > --config 'web.allow_push=*' --config web.push_ssl=False
1598 > --config 'web.allow_push=*' --config web.push_ssl=False
1603 $ cat hg.pid >> $DAEMON_PIDS
1599 $ cat hg.pid >> $DAEMON_PIDS
1604 $ rm "${USERCACHE}"/*
1600 $ rm "${USERCACHE}"/*
1605 $ hg push -R r8 http://localhost:$HGPORT2/#default
1601 $ hg push -R r8 http://localhost:$HGPORT2/#default
1606 pushing to http://localhost:$HGPORT2/
1602 pushing to http://localhost:$HGPORT2/
1607 searching for changes
1603 searching for changes
1608 searching for changes
1604 searching for changes
1609 remote: adding changesets
1605 remote: adding changesets
1610 remote: adding manifests
1606 remote: adding manifests
1611 remote: adding file changes
1607 remote: adding file changes
1612 remote: added 1 changesets with 1 changes to 1 files
1608 remote: added 1 changesets with 1 changes to 1 files
1613 $ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1609 $ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1614 $ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1610 $ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1615
1611
1616 Clone over http, no largefiles pulled on clone.
1612 Clone over http, no largefiles pulled on clone.
1617
1613
1618 $ hg clone http://localhost:$HGPORT2/#default http-clone -U
1614 $ hg clone http://localhost:$HGPORT2/#default http-clone -U
1619 adding changesets
1615 adding changesets
1620 adding manifests
1616 adding manifests
1621 adding file changes
1617 adding file changes
1622 added 1 changesets with 1 changes to 1 files
1618 added 1 changesets with 1 changes to 1 files
1623
1619
1624 test 'verify' with remotestore:
1620 test 'verify' with remotestore:
1625
1621
1626 $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
1622 $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
1627 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1623 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1628 $ hg -R http-clone verify --large --lfa
1624 $ hg -R http-clone verify --large --lfa
1629 checking changesets
1625 checking changesets
1630 checking manifests
1626 checking manifests
1631 crosschecking files in changesets and manifests
1627 crosschecking files in changesets and manifests
1632 checking files
1628 checking files
1633 1 files, 1 changesets, 1 total revisions
1629 1 files, 1 changesets, 1 total revisions
1634 searching 1 changesets for largefiles
1630 searching 1 changesets for largefiles
1635 changeset 0:cf03e5bb9936: f1 missing
1631 changeset 0:cf03e5bb9936: f1 missing
1636 verified existence of 1 revisions of 1 largefiles
1632 verified existence of 1 revisions of 1 largefiles
1637 [1]
1633 [1]
1638 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1634 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1639 $ hg -R http-clone -q verify --large --lfa
1635 $ hg -R http-clone -q verify --large --lfa
1640 searching 1 changesets for largefiles
1641 verified existence of 1 revisions of 1 largefiles
1642
1636
1643 largefiles pulled on update - a largefile missing on the server:
1637 largefiles pulled on update - a largefile missing on the server:
1644 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1638 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1645 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1639 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1646 getting changed largefiles
1640 getting changed largefiles
1647 abort: remotestore: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 is missing
1641 abort: remotestore: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 is missing
1648 [255]
1642 [255]
1649 $ hg -R http-clone up -Cqr null
1643 $ hg -R http-clone up -Cqr null
1650
1644
1651 largefiles pulled on update - a largefile corrupted on the server:
1645 largefiles pulled on update - a largefile corrupted on the server:
1652 $ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
1646 $ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
1653 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1647 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1654 getting changed largefiles
1648 getting changed largefiles
1655 f1: data corruption (expected 02a439e5c31c526465ab1a0ca1f431f76b827b90, got 6a7bb2556144babe3899b25e5428123735bb1e27)
1649 f1: data corruption (expected 02a439e5c31c526465ab1a0ca1f431f76b827b90, got 6a7bb2556144babe3899b25e5428123735bb1e27)
1656 0 largefiles updated, 0 removed
1650 0 largefiles updated, 0 removed
1657 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1651 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1658 $ hg -R http-clone st
1652 $ hg -R http-clone st
1659 ! f1
1653 ! f1
1660 $ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1654 $ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1661 $ [ ! -f http-clone/f1 ]
1655 $ [ ! -f http-clone/f1 ]
1662 $ [ ! -f http-clone-usercache ]
1656 $ [ ! -f http-clone-usercache ]
1663 $ hg -R http-clone verify --large --lfc
1657 $ hg -R http-clone verify --large --lfc
1664 checking changesets
1658 checking changesets
1665 checking manifests
1659 checking manifests
1666 crosschecking files in changesets and manifests
1660 crosschecking files in changesets and manifests
1667 checking files
1661 checking files
1668 1 files, 1 changesets, 1 total revisions
1662 1 files, 1 changesets, 1 total revisions
1669 searching 1 changesets for largefiles
1663 searching 1 changesets for largefiles
1670 verified contents of 1 revisions of 1 largefiles
1664 verified contents of 1 revisions of 1 largefiles
1671 $ hg -R http-clone up -Cqr null
1665 $ hg -R http-clone up -Cqr null
1672
1666
1673 largefiles pulled on update - no server side problems:
1667 largefiles pulled on update - no server side problems:
1674 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1668 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1675 $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache
1669 $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache
1676 resolving manifests
1670 resolving manifests
1677 overwrite: False, partial: False
1671 overwrite: False, partial: False
1678 ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936
1672 ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936
1679 .hglf/f1: remote created -> g
1673 .hglf/f1: remote created -> g
1680 updating: .hglf/f1 1/1 files (100.00%)
1674 updating: .hglf/f1 1/1 files (100.00%)
1681 getting .hglf/f1
1675 getting .hglf/f1
1682 getting changed largefiles
1676 getting changed largefiles
1683 using http://localhost:$HGPORT2/
1677 using http://localhost:$HGPORT2/
1684 sending capabilities command
1678 sending capabilities command
1685 getting largefiles: 0/1 lfile (0.00%)
1679 getting largefiles: 0/1 lfile (0.00%)
1686 getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90
1680 getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90
1687 sending batch command
1681 sending batch command
1688 sending getlfile command
1682 sending getlfile command
1689 found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store
1683 found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store
1690 1 largefiles updated, 0 removed
1684 1 largefiles updated, 0 removed
1691 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1685 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1692
1686
1693 $ ls http-clone-usercache/*
1687 $ ls http-clone-usercache/*
1694 http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
1688 http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
1695
1689
1696 $ rm -rf empty http-clone*
1690 $ rm -rf empty http-clone*
1697
1691
1698 used all HGPORTs, kill all daemons
1692 used all HGPORTs, kill all daemons
1699 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1693 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1700
1694
1701 #endif
1695 #endif
1702
1696
1703
1697
1704 #if unix-permissions
1698 #if unix-permissions
1705
1699
1706 Clone a local repository owned by another user
1700 Clone a local repository owned by another user
1707 We have to simulate that here by setting $HOME and removing write permissions
1701 We have to simulate that here by setting $HOME and removing write permissions
1708 $ ORIGHOME="$HOME"
1702 $ ORIGHOME="$HOME"
1709 $ mkdir alice
1703 $ mkdir alice
1710 $ HOME="`pwd`/alice"
1704 $ HOME="`pwd`/alice"
1711 $ cd alice
1705 $ cd alice
1712 $ hg init pubrepo
1706 $ hg init pubrepo
1713 $ cd pubrepo
1707 $ cd pubrepo
1714 $ dd if=/dev/zero bs=1k count=11k > a-large-file 2> /dev/null
1708 $ dd if=/dev/zero bs=1k count=11k > a-large-file 2> /dev/null
1715 $ hg add --large a-large-file
1709 $ hg add --large a-large-file
1716 $ hg commit -m "Add a large file"
1710 $ hg commit -m "Add a large file"
1717 Invoking status precommit hook
1711 Invoking status precommit hook
1718 A a-large-file
1712 A a-large-file
1719 $ cd ..
1713 $ cd ..
1720 $ chmod -R a-w pubrepo
1714 $ chmod -R a-w pubrepo
1721 $ cd ..
1715 $ cd ..
1722 $ mkdir bob
1716 $ mkdir bob
1723 $ HOME="`pwd`/bob"
1717 $ HOME="`pwd`/bob"
1724 $ cd bob
1718 $ cd bob
1725 $ hg clone --pull ../alice/pubrepo pubrepo
1719 $ hg clone --pull ../alice/pubrepo pubrepo
1726 requesting all changes
1720 requesting all changes
1727 adding changesets
1721 adding changesets
1728 adding manifests
1722 adding manifests
1729 adding file changes
1723 adding file changes
1730 added 1 changesets with 1 changes to 1 files
1724 added 1 changesets with 1 changes to 1 files
1731 updating to branch default
1725 updating to branch default
1732 getting changed largefiles
1726 getting changed largefiles
1733 1 largefiles updated, 0 removed
1727 1 largefiles updated, 0 removed
1734 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1728 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1735 $ cd ..
1729 $ cd ..
1736 $ chmod -R u+w alice/pubrepo
1730 $ chmod -R u+w alice/pubrepo
1737 $ HOME="$ORIGHOME"
1731 $ HOME="$ORIGHOME"
1738
1732
1739 #endif
1733 #endif
1740
1734
1741 #if symlink
1735 #if symlink
1742
1736
1743 Symlink to a large largefile should behave the same as a symlink to a normal file
1737 Symlink to a large largefile should behave the same as a symlink to a normal file
1744 $ hg init largesymlink
1738 $ hg init largesymlink
1745 $ cd largesymlink
1739 $ cd largesymlink
1746 $ dd if=/dev/zero bs=1k count=10k of=largefile 2>/dev/null
1740 $ dd if=/dev/zero bs=1k count=10k of=largefile 2>/dev/null
1747 $ hg add --large largefile
1741 $ hg add --large largefile
1748 $ hg commit -m "commit a large file"
1742 $ hg commit -m "commit a large file"
1749 Invoking status precommit hook
1743 Invoking status precommit hook
1750 A largefile
1744 A largefile
1751 $ ln -s largefile largelink
1745 $ ln -s largefile largelink
1752 $ hg add largelink
1746 $ hg add largelink
1753 $ hg commit -m "commit a large symlink"
1747 $ hg commit -m "commit a large symlink"
1754 Invoking status precommit hook
1748 Invoking status precommit hook
1755 A largelink
1749 A largelink
1756 $ rm -f largelink
1750 $ rm -f largelink
1757 $ hg up >/dev/null
1751 $ hg up >/dev/null
1758 $ test -f largelink
1752 $ test -f largelink
1759 [1]
1753 [1]
1760 $ test -L largelink
1754 $ test -L largelink
1761 [1]
1755 [1]
1762 $ rm -f largelink # make next part of the test independent of the previous
1756 $ rm -f largelink # make next part of the test independent of the previous
1763 $ hg up -C >/dev/null
1757 $ hg up -C >/dev/null
1764 $ test -f largelink
1758 $ test -f largelink
1765 $ test -L largelink
1759 $ test -L largelink
1766 $ cd ..
1760 $ cd ..
1767
1761
1768 #endif
1762 #endif
1769
1763
1770 test for pattern matching on 'hg status':
1764 test for pattern matching on 'hg status':
1771 to boost performance, largefiles checks whether specified patterns are
1765 to boost performance, largefiles checks whether specified patterns are
1772 related to largefiles in working directory (NOT to STANDIN) or not.
1766 related to largefiles in working directory (NOT to STANDIN) or not.
1773
1767
1774 $ hg init statusmatch
1768 $ hg init statusmatch
1775 $ cd statusmatch
1769 $ cd statusmatch
1776
1770
1777 $ mkdir -p a/b/c/d
1771 $ mkdir -p a/b/c/d
1778 $ echo normal > a/b/c/d/e.normal.txt
1772 $ echo normal > a/b/c/d/e.normal.txt
1779 $ hg add a/b/c/d/e.normal.txt
1773 $ hg add a/b/c/d/e.normal.txt
1780 $ echo large > a/b/c/d/e.large.txt
1774 $ echo large > a/b/c/d/e.large.txt
1781 $ hg add --large a/b/c/d/e.large.txt
1775 $ hg add --large a/b/c/d/e.large.txt
1782 $ mkdir -p a/b/c/x
1776 $ mkdir -p a/b/c/x
1783 $ echo normal > a/b/c/x/y.normal.txt
1777 $ echo normal > a/b/c/x/y.normal.txt
1784 $ hg add a/b/c/x/y.normal.txt
1778 $ hg add a/b/c/x/y.normal.txt
1785 $ hg commit -m 'add files'
1779 $ hg commit -m 'add files'
1786 Invoking status precommit hook
1780 Invoking status precommit hook
1787 A a/b/c/d/e.large.txt
1781 A a/b/c/d/e.large.txt
1788 A a/b/c/d/e.normal.txt
1782 A a/b/c/d/e.normal.txt
1789 A a/b/c/x/y.normal.txt
1783 A a/b/c/x/y.normal.txt
1790
1784
1791 (1) no pattern: no performance boost
1785 (1) no pattern: no performance boost
1792 $ hg status -A
1786 $ hg status -A
1793 C a/b/c/d/e.large.txt
1787 C a/b/c/d/e.large.txt
1794 C a/b/c/d/e.normal.txt
1788 C a/b/c/d/e.normal.txt
1795 C a/b/c/x/y.normal.txt
1789 C a/b/c/x/y.normal.txt
1796
1790
1797 (2) pattern not related to largefiles: performance boost
1791 (2) pattern not related to largefiles: performance boost
1798 $ hg status -A a/b/c/x
1792 $ hg status -A a/b/c/x
1799 C a/b/c/x/y.normal.txt
1793 C a/b/c/x/y.normal.txt
1800
1794
1801 (3) pattern related to largefiles: no performance boost
1795 (3) pattern related to largefiles: no performance boost
1802 $ hg status -A a/b/c/d
1796 $ hg status -A a/b/c/d
1803 C a/b/c/d/e.large.txt
1797 C a/b/c/d/e.large.txt
1804 C a/b/c/d/e.normal.txt
1798 C a/b/c/d/e.normal.txt
1805
1799
1806 (4) pattern related to STANDIN (not to largefiles): performance boost
1800 (4) pattern related to STANDIN (not to largefiles): performance boost
1807 $ hg status -A .hglf/a
1801 $ hg status -A .hglf/a
1808 C .hglf/a/b/c/d/e.large.txt
1802 C .hglf/a/b/c/d/e.large.txt
1809
1803
1810 (5) mixed case: no performance boost
1804 (5) mixed case: no performance boost
1811 $ hg status -A a/b/c/x a/b/c/d
1805 $ hg status -A a/b/c/x a/b/c/d
1812 C a/b/c/d/e.large.txt
1806 C a/b/c/d/e.large.txt
1813 C a/b/c/d/e.normal.txt
1807 C a/b/c/d/e.normal.txt
1814 C a/b/c/x/y.normal.txt
1808 C a/b/c/x/y.normal.txt
1815
1809
1816 verify that largefiles doesn't break filesets
1810 verify that largefiles doesn't break filesets
1817
1811
1818 $ hg log --rev . --exclude "set:binary()"
1812 $ hg log --rev . --exclude "set:binary()"
1819 changeset: 0:41bd42f10efa
1813 changeset: 0:41bd42f10efa
1820 tag: tip
1814 tag: tip
1821 user: test
1815 user: test
1822 date: Thu Jan 01 00:00:00 1970 +0000
1816 date: Thu Jan 01 00:00:00 1970 +0000
1823 summary: add files
1817 summary: add files
1824
1818
1825 verify that large files in subrepos handled properly
1819 verify that large files in subrepos handled properly
1826 $ hg init subrepo
1820 $ hg init subrepo
1827 $ echo "subrepo = subrepo" > .hgsub
1821 $ echo "subrepo = subrepo" > .hgsub
1828 $ hg add .hgsub
1822 $ hg add .hgsub
1829 $ hg ci -m "add subrepo"
1823 $ hg ci -m "add subrepo"
1830 Invoking status precommit hook
1824 Invoking status precommit hook
1831 A .hgsub
1825 A .hgsub
1832 ? .hgsubstate
1826 ? .hgsubstate
1833 $ echo "rev 1" > subrepo/large.txt
1827 $ echo "rev 1" > subrepo/large.txt
1834 $ hg -R subrepo add --large subrepo/large.txt
1828 $ hg -R subrepo add --large subrepo/large.txt
1835 $ hg sum
1829 $ hg sum
1836 parent: 1:8ee150ea2e9c tip
1830 parent: 1:8ee150ea2e9c tip
1837 add subrepo
1831 add subrepo
1838 branch: default
1832 branch: default
1839 commit: 1 subrepos
1833 commit: 1 subrepos
1840 update: (current)
1834 update: (current)
1841 $ hg st
1835 $ hg st
1842 $ hg st -S
1836 $ hg st -S
1843 A subrepo/large.txt
1837 A subrepo/large.txt
1844 $ hg ci -S -m "commit top repo"
1838 $ hg ci -S -m "commit top repo"
1845 committing subrepository subrepo
1839 committing subrepository subrepo
1846 Invoking status precommit hook
1840 Invoking status precommit hook
1847 A large.txt
1841 A large.txt
1848 Invoking status precommit hook
1842 Invoking status precommit hook
1849 M .hgsubstate
1843 M .hgsubstate
1850 # No differences
1844 # No differences
1851 $ hg st -S
1845 $ hg st -S
1852 $ hg sum
1846 $ hg sum
1853 parent: 2:ce4cd0c527a6 tip
1847 parent: 2:ce4cd0c527a6 tip
1854 commit top repo
1848 commit top repo
1855 branch: default
1849 branch: default
1856 commit: (clean)
1850 commit: (clean)
1857 update: (current)
1851 update: (current)
1858 $ echo "rev 2" > subrepo/large.txt
1852 $ echo "rev 2" > subrepo/large.txt
1859 $ hg st -S
1853 $ hg st -S
1860 M subrepo/large.txt
1854 M subrepo/large.txt
1861 $ hg sum
1855 $ hg sum
1862 parent: 2:ce4cd0c527a6 tip
1856 parent: 2:ce4cd0c527a6 tip
1863 commit top repo
1857 commit top repo
1864 branch: default
1858 branch: default
1865 commit: 1 subrepos
1859 commit: 1 subrepos
1866 update: (current)
1860 update: (current)
1867 $ hg ci -m "this commit should fail without -S"
1861 $ hg ci -m "this commit should fail without -S"
1868 abort: uncommitted changes in subrepo subrepo
1862 abort: uncommitted changes in subrepo subrepo
1869 (use --subrepos for recursive commit)
1863 (use --subrepos for recursive commit)
1870 [255]
1864 [255]
1871
1865
1872 Add a normal file to the subrepo, then test archiving
1866 Add a normal file to the subrepo, then test archiving
1873
1867
1874 $ echo 'normal file' > subrepo/normal.txt
1868 $ echo 'normal file' > subrepo/normal.txt
1875 $ hg -R subrepo add subrepo/normal.txt
1869 $ hg -R subrepo add subrepo/normal.txt
1876
1870
1877 Lock in subrepo, otherwise the change isn't archived
1871 Lock in subrepo, otherwise the change isn't archived
1878
1872
1879 $ hg ci -S -m "add normal file to top level"
1873 $ hg ci -S -m "add normal file to top level"
1880 committing subrepository subrepo
1874 committing subrepository subrepo
1881 Invoking status precommit hook
1875 Invoking status precommit hook
1882 M large.txt
1876 M large.txt
1883 A normal.txt
1877 A normal.txt
1884 Invoking status precommit hook
1878 Invoking status precommit hook
1885 M .hgsubstate
1879 M .hgsubstate
1886 $ hg archive -S ../lf_subrepo_archive
1880 $ hg archive -S ../lf_subrepo_archive
1887 $ find ../lf_subrepo_archive | sort
1881 $ find ../lf_subrepo_archive | sort
1888 ../lf_subrepo_archive
1882 ../lf_subrepo_archive
1889 ../lf_subrepo_archive/.hg_archival.txt
1883 ../lf_subrepo_archive/.hg_archival.txt
1890 ../lf_subrepo_archive/.hgsub
1884 ../lf_subrepo_archive/.hgsub
1891 ../lf_subrepo_archive/.hgsubstate
1885 ../lf_subrepo_archive/.hgsubstate
1892 ../lf_subrepo_archive/a
1886 ../lf_subrepo_archive/a
1893 ../lf_subrepo_archive/a/b
1887 ../lf_subrepo_archive/a/b
1894 ../lf_subrepo_archive/a/b/c
1888 ../lf_subrepo_archive/a/b/c
1895 ../lf_subrepo_archive/a/b/c/d
1889 ../lf_subrepo_archive/a/b/c/d
1896 ../lf_subrepo_archive/a/b/c/d/e.large.txt
1890 ../lf_subrepo_archive/a/b/c/d/e.large.txt
1897 ../lf_subrepo_archive/a/b/c/d/e.normal.txt
1891 ../lf_subrepo_archive/a/b/c/d/e.normal.txt
1898 ../lf_subrepo_archive/a/b/c/x
1892 ../lf_subrepo_archive/a/b/c/x
1899 ../lf_subrepo_archive/a/b/c/x/y.normal.txt
1893 ../lf_subrepo_archive/a/b/c/x/y.normal.txt
1900 ../lf_subrepo_archive/subrepo
1894 ../lf_subrepo_archive/subrepo
1901 ../lf_subrepo_archive/subrepo/large.txt
1895 ../lf_subrepo_archive/subrepo/large.txt
1902 ../lf_subrepo_archive/subrepo/normal.txt
1896 ../lf_subrepo_archive/subrepo/normal.txt
1903
1897
1904 Test update with subrepos.
1898 Test update with subrepos.
1905
1899
1906 $ hg update 0
1900 $ hg update 0
1907 getting changed largefiles
1901 getting changed largefiles
1908 0 largefiles updated, 1 removed
1902 0 largefiles updated, 1 removed
1909 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1903 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1910 $ hg status -S
1904 $ hg status -S
1911 $ hg update tip
1905 $ hg update tip
1912 getting changed largefiles
1906 getting changed largefiles
1913 1 largefiles updated, 0 removed
1907 1 largefiles updated, 0 removed
1914 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1908 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1915 $ hg status -S
1909 $ hg status -S
1916 # modify a large file
1910 # modify a large file
1917 $ echo "modified" > subrepo/large.txt
1911 $ echo "modified" > subrepo/large.txt
1918 $ hg st -S
1912 $ hg st -S
1919 M subrepo/large.txt
1913 M subrepo/large.txt
1920 # update -C should revert the change.
1914 # update -C should revert the change.
1921 $ hg update -C
1915 $ hg update -C
1922 getting changed largefiles
1916 getting changed largefiles
1923 1 largefiles updated, 0 removed
1917 1 largefiles updated, 0 removed
1924 getting changed largefiles
1918 getting changed largefiles
1925 0 largefiles updated, 0 removed
1919 0 largefiles updated, 0 removed
1926 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1920 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1927 $ hg status -S
1921 $ hg status -S
1928
1922
1929 Test archiving a revision that references a subrepo that is not yet
1923 Test archiving a revision that references a subrepo that is not yet
1930 cloned (see test-subrepo-recursion.t):
1924 cloned (see test-subrepo-recursion.t):
1931
1925
1932 $ hg clone -U . ../empty
1926 $ hg clone -U . ../empty
1933 $ cd ../empty
1927 $ cd ../empty
1934 $ hg archive --subrepos -r tip ../archive.tar.gz
1928 $ hg archive --subrepos -r tip ../archive.tar.gz
1935 cloning subrepo subrepo from $TESTTMP/statusmatch/subrepo
1929 cloning subrepo subrepo from $TESTTMP/statusmatch/subrepo
1936 $ cd ..
1930 $ cd ..
1937
1931
1938 Test that addremove picks up largefiles prior to the initial commit (issue3541)
1932 Test that addremove picks up largefiles prior to the initial commit (issue3541)
1939
1933
1940 $ hg init addrm2
1934 $ hg init addrm2
1941 $ cd addrm2
1935 $ cd addrm2
1942 $ touch large.dat
1936 $ touch large.dat
1943 $ touch large2.dat
1937 $ touch large2.dat
1944 $ touch normal
1938 $ touch normal
1945 $ hg add --large large.dat
1939 $ hg add --large large.dat
1946 $ hg addremove -v
1940 $ hg addremove -v
1947 adding large2.dat as a largefile
1941 adding large2.dat as a largefile
1948 adding normal
1942 adding normal
1949
1943
1950 Test that forgetting all largefiles reverts to islfilesrepo() == False
1944 Test that forgetting all largefiles reverts to islfilesrepo() == False
1951 (addremove will add *.dat as normal files now)
1945 (addremove will add *.dat as normal files now)
1952 $ hg forget large.dat
1946 $ hg forget large.dat
1953 $ hg forget large2.dat
1947 $ hg forget large2.dat
1954 $ hg addremove -v
1948 $ hg addremove -v
1955 adding large.dat
1949 adding large.dat
1956 adding large2.dat
1950 adding large2.dat
1957
1951
1958 Test commit's addremove option prior to the first commit
1952 Test commit's addremove option prior to the first commit
1959 $ hg forget large.dat
1953 $ hg forget large.dat
1960 $ hg forget large2.dat
1954 $ hg forget large2.dat
1961 $ hg add --large large.dat
1955 $ hg add --large large.dat
1962 $ hg ci -Am "commit"
1956 $ hg ci -Am "commit"
1963 adding large2.dat as a largefile
1957 adding large2.dat as a largefile
1964 Invoking status precommit hook
1958 Invoking status precommit hook
1965 A large.dat
1959 A large.dat
1966 A large2.dat
1960 A large2.dat
1967 A normal
1961 A normal
1968 $ find .hglf | sort
1962 $ find .hglf | sort
1969 .hglf
1963 .hglf
1970 .hglf/large.dat
1964 .hglf/large.dat
1971 .hglf/large2.dat
1965 .hglf/large2.dat
1972
1966
1973 Test actions on largefiles using relative paths from subdir
1967 Test actions on largefiles using relative paths from subdir
1974
1968
1975 $ mkdir sub
1969 $ mkdir sub
1976 $ cd sub
1970 $ cd sub
1977 $ echo anotherlarge > anotherlarge
1971 $ echo anotherlarge > anotherlarge
1978 $ hg add --large anotherlarge
1972 $ hg add --large anotherlarge
1979 $ hg st
1973 $ hg st
1980 A sub/anotherlarge
1974 A sub/anotherlarge
1981 $ hg st anotherlarge
1975 $ hg st anotherlarge
1982 A anotherlarge
1976 A anotherlarge
1983 $ hg commit -m anotherlarge anotherlarge
1977 $ hg commit -m anotherlarge anotherlarge
1984 Invoking status precommit hook
1978 Invoking status precommit hook
1985 A sub/anotherlarge
1979 A sub/anotherlarge
1986 $ hg log anotherlarge
1980 $ hg log anotherlarge
1987 changeset: 1:9627a577c5e9
1981 changeset: 1:9627a577c5e9
1988 tag: tip
1982 tag: tip
1989 user: test
1983 user: test
1990 date: Thu Jan 01 00:00:00 1970 +0000
1984 date: Thu Jan 01 00:00:00 1970 +0000
1991 summary: anotherlarge
1985 summary: anotherlarge
1992
1986
1993 $ echo more >> anotherlarge
1987 $ echo more >> anotherlarge
1994 $ hg st .
1988 $ hg st .
1995 M anotherlarge
1989 M anotherlarge
1996 $ hg cat anotherlarge
1990 $ hg cat anotherlarge
1997 anotherlarge
1991 anotherlarge
1998 $ hg revert anotherlarge
1992 $ hg revert anotherlarge
1999 $ hg st
1993 $ hg st
2000 ? sub/anotherlarge.orig
1994 ? sub/anotherlarge.orig
2001 $ cd ..
1995 $ cd ..
2002
1996
2003 $ cd ..
1997 $ cd ..
2004
1998
2005 issue3651: summary/outgoing with largefiles shows "no remote repo"
1999 issue3651: summary/outgoing with largefiles shows "no remote repo"
2006 unexpectedly
2000 unexpectedly
2007
2001
2008 $ mkdir issue3651
2002 $ mkdir issue3651
2009 $ cd issue3651
2003 $ cd issue3651
2010
2004
2011 $ hg init src
2005 $ hg init src
2012 $ echo a > src/a
2006 $ echo a > src/a
2013 $ hg -R src add --large src/a
2007 $ hg -R src add --large src/a
2014 $ hg -R src commit -m '#0'
2008 $ hg -R src commit -m '#0'
2015 Invoking status precommit hook
2009 Invoking status precommit hook
2016 A a
2010 A a
2017
2011
2018 check messages when no remote repository is specified:
2012 check messages when no remote repository is specified:
2019 "no remote repo" route for "hg outgoing --large" is not tested here,
2013 "no remote repo" route for "hg outgoing --large" is not tested here,
2020 because it can't be reproduced easily.
2014 because it can't be reproduced easily.
2021
2015
2022 $ hg init clone1
2016 $ hg init clone1
2023 $ hg -R clone1 -q pull src
2017 $ hg -R clone1 -q pull src
2024 $ hg -R clone1 -q update
2018 $ hg -R clone1 -q update
2025 $ hg -R clone1 paths | grep default
2019 $ hg -R clone1 paths | grep default
2026 [1]
2020 [1]
2027
2021
2028 $ hg -R clone1 summary --large
2022 $ hg -R clone1 summary --large
2029 parent: 0:fc0bd45326d3 tip
2023 parent: 0:fc0bd45326d3 tip
2030 #0
2024 #0
2031 branch: default
2025 branch: default
2032 commit: (clean)
2026 commit: (clean)
2033 update: (current)
2027 update: (current)
2034 largefiles: (no remote repo)
2028 largefiles: (no remote repo)
2035
2029
2036 check messages when there is no files to upload:
2030 check messages when there is no files to upload:
2037
2031
2038 $ hg -q clone src clone2
2032 $ hg -q clone src clone2
2039 $ hg -R clone2 paths | grep default
2033 $ hg -R clone2 paths | grep default
2040 default = $TESTTMP/issue3651/src (glob)
2034 default = $TESTTMP/issue3651/src (glob)
2041
2035
2042 $ hg -R clone2 summary --large
2036 $ hg -R clone2 summary --large
2043 parent: 0:fc0bd45326d3 tip
2037 parent: 0:fc0bd45326d3 tip
2044 #0
2038 #0
2045 branch: default
2039 branch: default
2046 commit: (clean)
2040 commit: (clean)
2047 update: (current)
2041 update: (current)
2048 searching for changes
2042 searching for changes
2049 largefiles: (no files to upload)
2043 largefiles: (no files to upload)
2050 $ hg -R clone2 outgoing --large
2044 $ hg -R clone2 outgoing --large
2051 comparing with $TESTTMP/issue3651/src (glob)
2045 comparing with $TESTTMP/issue3651/src (glob)
2052 searching for changes
2046 searching for changes
2053 no changes found
2047 no changes found
2054 searching for changes
2048 searching for changes
2055 largefiles: no files to upload
2049 largefiles: no files to upload
2056 [1]
2050 [1]
2057
2051
2058 check messages when there are files to upload:
2052 check messages when there are files to upload:
2059
2053
2060 $ echo b > clone2/b
2054 $ echo b > clone2/b
2061 $ hg -R clone2 add --large clone2/b
2055 $ hg -R clone2 add --large clone2/b
2062 $ hg -R clone2 commit -m '#1'
2056 $ hg -R clone2 commit -m '#1'
2063 Invoking status precommit hook
2057 Invoking status precommit hook
2064 A b
2058 A b
2065 $ hg -R clone2 summary --large
2059 $ hg -R clone2 summary --large
2066 parent: 1:1acbe71ce432 tip
2060 parent: 1:1acbe71ce432 tip
2067 #1
2061 #1
2068 branch: default
2062 branch: default
2069 commit: (clean)
2063 commit: (clean)
2070 update: (current)
2064 update: (current)
2071 searching for changes
2065 searching for changes
2072 largefiles: 1 to upload
2066 largefiles: 1 to upload
2073 $ hg -R clone2 outgoing --large
2067 $ hg -R clone2 outgoing --large
2074 comparing with $TESTTMP/issue3651/src (glob)
2068 comparing with $TESTTMP/issue3651/src (glob)
2075 searching for changes
2069 searching for changes
2076 changeset: 1:1acbe71ce432
2070 changeset: 1:1acbe71ce432
2077 tag: tip
2071 tag: tip
2078 user: test
2072 user: test
2079 date: Thu Jan 01 00:00:00 1970 +0000
2073 date: Thu Jan 01 00:00:00 1970 +0000
2080 summary: #1
2074 summary: #1
2081
2075
2082 searching for changes
2076 searching for changes
2083 largefiles to upload:
2077 largefiles to upload:
2084 b
2078 b
2085
2079
2086
2080
2087 $ cd ..
2081 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now