##// END OF EJS Templates
largefiles: allow use of urls with #revision...
Mads Kiilerich -
r18489:f1700480 stable
parent child Browse files
Show More
@@ -1,191 +1,192 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
99 write = self.ui.write
100 failed = False
100 failed = False
101
101
102 write(_('searching %d changesets for largefiles\n') % len(revs))
102 write(_('searching %d changesets for largefiles\n') % 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 write(_('verified contents of %d revisions of %d largefiles\n')
117 % (numrevs, numlfiles))
117 % (numrevs, numlfiles))
118 else:
118 else:
119 write(_('verified existence of %d revisions of %d largefiles\n')
119 write(_('verified existence of %d revisions of %d largefiles\n')
120 % (numrevs, numlfiles))
120 % (numrevs, numlfiles))
121
121
122 return int(failed)
122 return int(failed)
123
123
124 def _getfile(self, tmpfile, filename, hash):
124 def _getfile(self, tmpfile, filename, hash):
125 '''Fetch one revision of one file from the store and write it
125 '''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
126 to tmpfile. Compute the hash of the file on-the-fly as it
127 downloads and return the binary hash. Close tmpfile. Raise
127 downloads and return the binary hash. Close tmpfile. Raise
128 StoreError if unable to download the file (e.g. it does not
128 StoreError if unable to download the file (e.g. it does not
129 exist in the store).'''
129 exist in the store).'''
130 raise NotImplementedError('abstract method')
130 raise NotImplementedError('abstract method')
131
131
132 def _verifyfile(self, cctx, cset, contents, standin, verified):
132 def _verifyfile(self, cctx, cset, contents, standin, verified):
133 '''Perform the actual verification of a file in the store.
133 '''Perform the actual verification of a file in the store.
134 '''
134 '''
135 raise NotImplementedError('abstract method')
135 raise NotImplementedError('abstract method')
136
136
137 import localstore, wirestore
137 import localstore, wirestore
138
138
139 _storeprovider = {
139 _storeprovider = {
140 'file': [localstore.localstore],
140 'file': [localstore.localstore],
141 'http': [wirestore.wirestore],
141 'http': [wirestore.wirestore],
142 'https': [wirestore.wirestore],
142 'https': [wirestore.wirestore],
143 'ssh': [wirestore.wirestore],
143 'ssh': [wirestore.wirestore],
144 }
144 }
145
145
146 _scheme_re = re.compile(r'^([a-zA-Z0-9+-.]+)://')
146 _scheme_re = re.compile(r'^([a-zA-Z0-9+-.]+)://')
147
147
148 # During clone this function is passed the src's ui object
148 # 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
149 # but it needs the dest's ui object so it can read out of
150 # the config file. Use repo.ui instead.
150 # the config file. Use repo.ui instead.
151 def _openstore(repo, remote=None, put=False):
151 def _openstore(repo, remote=None, put=False):
152 ui = repo.ui
152 ui = repo.ui
153
153
154 if not remote:
154 if not remote:
155 lfpullsource = getattr(repo, 'lfpullsource', None)
155 lfpullsource = getattr(repo, 'lfpullsource', None)
156 if lfpullsource:
156 if lfpullsource:
157 path = ui.expandpath(lfpullsource)
157 path = ui.expandpath(lfpullsource)
158 else:
158 else:
159 path = ui.expandpath('default-push', 'default')
159 path = ui.expandpath('default-push', 'default')
160
160
161 # ui.expandpath() leaves 'default-push' and 'default' alone if
161 # ui.expandpath() leaves 'default-push' and 'default' alone if
162 # they cannot be expanded: fallback to the empty string,
162 # they cannot be expanded: fallback to the empty string,
163 # meaning the current directory.
163 # meaning the current directory.
164 if path == 'default-push' or path == 'default':
164 if path == 'default-push' or path == 'default':
165 path = ''
165 path = ''
166 remote = repo
166 remote = repo
167 else:
167 else:
168 path, _branches = hg.parseurl(path)
168 remote = hg.peer(repo, {}, path)
169 remote = hg.peer(repo, {}, path)
169
170
170 # The path could be a scheme so use Mercurial's normal functionality
171 # The path could be a scheme so use Mercurial's normal functionality
171 # to resolve the scheme to a repository and use its path
172 # to resolve the scheme to a repository and use its path
172 path = util.safehasattr(remote, 'url') and remote.url() or remote.path
173 path = util.safehasattr(remote, 'url') and remote.url() or remote.path
173
174
174 match = _scheme_re.match(path)
175 match = _scheme_re.match(path)
175 if not match: # regular filesystem path
176 if not match: # regular filesystem path
176 scheme = 'file'
177 scheme = 'file'
177 else:
178 else:
178 scheme = match.group(1)
179 scheme = match.group(1)
179
180
180 try:
181 try:
181 storeproviders = _storeprovider[scheme]
182 storeproviders = _storeprovider[scheme]
182 except KeyError:
183 except KeyError:
183 raise util.Abort(_('unsupported URL scheme %r') % scheme)
184 raise util.Abort(_('unsupported URL scheme %r') % scheme)
184
185
185 for classobj in storeproviders:
186 for classobj in storeproviders:
186 try:
187 try:
187 return classobj(ui, repo, remote)
188 return classobj(ui, repo, remote)
188 except lfutil.storeprotonotcapable:
189 except lfutil.storeprotonotcapable:
189 pass
190 pass
190
191
191 raise util.Abort(_('%s does not appear to be a largefile store') % path)
192 raise util.Abort(_('%s does not appear to be a largefile store') % path)
@@ -1,2075 +1,2074 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
1185 default = $TESTTMP/d
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 missing
1205 changeset 9:598410d3eb9a: sub/large4 missing
1206 (looked for hash e166e74c7303192238d60af5a9c4ce9bef0b7928)
1206 (looked for hash e166e74c7303192238d60af5a9c4ce9bef0b7928)
1207 verified existence of 3 revisions of 3 largefiles
1207 verified existence of 3 revisions of 3 largefiles
1208 [1]
1208 [1]
1209
1209
1210 - introduce corruption and make sure that it is caught when checking content:
1210 - introduce corruption and make sure that it is caught when checking content:
1211 $ echo '5 cents' > $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1211 $ echo '5 cents' > $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1212 $ hg verify -q --large --lfc
1212 $ hg verify -q --large --lfc
1213 searching 1 changesets for largefiles
1213 searching 1 changesets for largefiles
1214 changeset 9:598410d3eb9a: sub/large4: contents differ
1214 changeset 9:598410d3eb9a: sub/large4: contents differ
1215 ($TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928:
1215 ($TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928:
1216 expected hash e166e74c7303192238d60af5a9c4ce9bef0b7928,
1216 expected hash e166e74c7303192238d60af5a9c4ce9bef0b7928,
1217 but got 1f19b76d5b3cad1472c87efb42b582c97e040060)
1217 but got 1f19b76d5b3cad1472c87efb42b582c97e040060)
1218 verified contents of 3 revisions of 3 largefiles
1218 verified contents of 3 revisions of 3 largefiles
1219 [1]
1219 [1]
1220
1220
1221 - cleanup
1221 - cleanup
1222 $ mv e166e74c7303192238d60af5a9c4ce9bef0b7928 $TESTTMP/d/.hg/largefiles/
1222 $ mv e166e74c7303192238d60af5a9c4ce9bef0b7928 $TESTTMP/d/.hg/largefiles/
1223
1223
1224 - verifying all revisions will fail because we didn't clone all largefiles to d:
1224 - verifying all revisions will fail because we didn't clone all largefiles to d:
1225 $ echo 'T-shirt' > $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1225 $ echo 'T-shirt' > $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1226 $ hg verify -q --large --lfa --lfc
1226 $ hg verify -q --large --lfa --lfc
1227 searching 10 changesets for largefiles
1227 searching 10 changesets for largefiles
1228 changeset 0:30d30fe6a5be: large1 missing
1228 changeset 0:30d30fe6a5be: large1 missing
1229 (looked for hash 4669e532d5b2c093a78eca010077e708a071bb64)
1229 (looked for hash 4669e532d5b2c093a78eca010077e708a071bb64)
1230 changeset 0:30d30fe6a5be: sub/large2 missing
1230 changeset 0:30d30fe6a5be: sub/large2 missing
1231 (looked for hash 1deebade43c8c498a3c8daddac0244dc55d1331d)
1231 (looked for hash 1deebade43c8c498a3c8daddac0244dc55d1331d)
1232 changeset 1:ce8896473775: large1 missing
1232 changeset 1:ce8896473775: large1 missing
1233 (looked for hash 5f78770c0e77ba4287ad6ef3071c9bf9c379742f)
1233 (looked for hash 5f78770c0e77ba4287ad6ef3071c9bf9c379742f)
1234 changeset 1:ce8896473775: sub/large2: contents differ
1234 changeset 1:ce8896473775: sub/large2: contents differ
1235 ($TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4:
1235 ($TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4:
1236 expected hash eb7338044dc27f9bc59b8dd5a246b065ead7a9c4,
1236 expected hash eb7338044dc27f9bc59b8dd5a246b065ead7a9c4,
1237 but got cfef678f24d3e339944138ecdd8fd85ca21d820f)
1237 but got cfef678f24d3e339944138ecdd8fd85ca21d820f)
1238 changeset 3:9e8fbc4bce62: large1: contents differ
1238 changeset 3:9e8fbc4bce62: large1: contents differ
1239 ($TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4:
1239 ($TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4:
1240 expected hash eb7338044dc27f9bc59b8dd5a246b065ead7a9c4,
1240 expected hash eb7338044dc27f9bc59b8dd5a246b065ead7a9c4,
1241 but got cfef678f24d3e339944138ecdd8fd85ca21d820f)
1241 but got cfef678f24d3e339944138ecdd8fd85ca21d820f)
1242 changeset 4:74c02385b94c: large3: contents differ
1242 changeset 4:74c02385b94c: large3: contents differ
1243 ($TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4:
1243 ($TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4:
1244 expected hash eb7338044dc27f9bc59b8dd5a246b065ead7a9c4,
1244 expected hash eb7338044dc27f9bc59b8dd5a246b065ead7a9c4,
1245 but got cfef678f24d3e339944138ecdd8fd85ca21d820f)
1245 but got cfef678f24d3e339944138ecdd8fd85ca21d820f)
1246 changeset 4:74c02385b94c: sub/large4: contents differ
1246 changeset 4:74c02385b94c: sub/large4: contents differ
1247 ($TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4:
1247 ($TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4:
1248 expected hash eb7338044dc27f9bc59b8dd5a246b065ead7a9c4,
1248 expected hash eb7338044dc27f9bc59b8dd5a246b065ead7a9c4,
1249 but got cfef678f24d3e339944138ecdd8fd85ca21d820f)
1249 but got cfef678f24d3e339944138ecdd8fd85ca21d820f)
1250 verified contents of 15 revisions of 6 largefiles
1250 verified contents of 15 revisions of 6 largefiles
1251 [1]
1251 [1]
1252
1252
1253 - cleanup
1253 - cleanup
1254 $ rm $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1254 $ rm $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1255
1255
1256 Merging does not revert to old versions of largefiles and also check
1256 Merging does not revert to old versions of largefiles and also check
1257 that merging after having pulled from a non-default remote works
1257 that merging after having pulled from a non-default remote works
1258 correctly.
1258 correctly.
1259
1259
1260 $ cd ..
1260 $ cd ..
1261 $ hg clone -r 7 e temp
1261 $ hg clone -r 7 e temp
1262 adding changesets
1262 adding changesets
1263 adding manifests
1263 adding manifests
1264 adding file changes
1264 adding file changes
1265 added 8 changesets with 24 changes to 10 files
1265 added 8 changesets with 24 changes to 10 files
1266 updating to branch default
1266 updating to branch default
1267 getting changed largefiles
1267 getting changed largefiles
1268 3 largefiles updated, 0 removed
1268 3 largefiles updated, 0 removed
1269 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1269 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1270 $ hg clone temp f
1270 $ hg clone temp f
1271 updating to branch default
1271 updating to branch default
1272 getting changed largefiles
1272 getting changed largefiles
1273 3 largefiles updated, 0 removed
1273 3 largefiles updated, 0 removed
1274 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1274 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1275 # Delete the largefiles in the largefiles system cache so that we have an
1275 # Delete the largefiles in the largefiles system cache so that we have an
1276 # opportunity to test that caching after a pull works.
1276 # opportunity to test that caching after a pull works.
1277 $ rm "${USERCACHE}"/*
1277 $ rm "${USERCACHE}"/*
1278 $ cd f
1278 $ cd f
1279 $ echo "large4-merge-test" > sub/large4
1279 $ echo "large4-merge-test" > sub/large4
1280 $ hg commit -m "Modify large4 to test merge"
1280 $ hg commit -m "Modify large4 to test merge"
1281 Invoking status precommit hook
1281 Invoking status precommit hook
1282 M sub/large4
1282 M sub/large4
1283 $ hg pull ../e
1283 $ hg pull ../e
1284 pulling from ../e
1284 pulling from ../e
1285 searching for changes
1285 searching for changes
1286 adding changesets
1286 adding changesets
1287 adding manifests
1287 adding manifests
1288 adding file changes
1288 adding file changes
1289 added 2 changesets with 4 changes to 4 files (+1 heads)
1289 added 2 changesets with 4 changes to 4 files (+1 heads)
1290 (run 'hg heads' to see heads, 'hg merge' to merge)
1290 (run 'hg heads' to see heads, 'hg merge' to merge)
1291 caching new largefiles
1291 caching new largefiles
1292 2 largefiles cached
1292 2 largefiles cached
1293 $ hg merge
1293 $ hg merge
1294 merging sub/large4
1294 merging sub/large4
1295 largefile sub/large4 has a merge conflict
1295 largefile sub/large4 has a merge conflict
1296 keep (l)ocal or take (o)ther? l
1296 keep (l)ocal or take (o)ther? l
1297 3 files updated, 1 files merged, 0 files removed, 0 files unresolved
1297 3 files updated, 1 files merged, 0 files removed, 0 files unresolved
1298 (branch merge, don't forget to commit)
1298 (branch merge, don't forget to commit)
1299 getting changed largefiles
1299 getting changed largefiles
1300 1 largefiles updated, 0 removed
1300 1 largefiles updated, 0 removed
1301 $ hg commit -m "Merge repos e and f"
1301 $ hg commit -m "Merge repos e and f"
1302 Invoking status precommit hook
1302 Invoking status precommit hook
1303 M normal3
1303 M normal3
1304 M sub/normal4
1304 M sub/normal4
1305 M sub2/large6
1305 M sub2/large6
1306 $ cat normal3
1306 $ cat normal3
1307 normal3-modified
1307 normal3-modified
1308 $ cat sub/normal4
1308 $ cat sub/normal4
1309 normal4-modified
1309 normal4-modified
1310 $ cat sub/large4
1310 $ cat sub/large4
1311 large4-merge-test
1311 large4-merge-test
1312 $ cat sub2/large6
1312 $ cat sub2/large6
1313 large6-modified
1313 large6-modified
1314 $ cat sub2/large7
1314 $ cat sub2/large7
1315 large7
1315 large7
1316
1316
1317 Test status after merging with a branch that introduces a new largefile:
1317 Test status after merging with a branch that introduces a new largefile:
1318
1318
1319 $ echo large > large
1319 $ echo large > large
1320 $ hg add --large large
1320 $ hg add --large large
1321 $ hg commit -m 'add largefile'
1321 $ hg commit -m 'add largefile'
1322 Invoking status precommit hook
1322 Invoking status precommit hook
1323 A large
1323 A large
1324 $ hg update -q ".^"
1324 $ hg update -q ".^"
1325 $ echo change >> normal3
1325 $ echo change >> normal3
1326 $ hg commit -m 'some change'
1326 $ hg commit -m 'some change'
1327 Invoking status precommit hook
1327 Invoking status precommit hook
1328 M normal3
1328 M normal3
1329 created new head
1329 created new head
1330 $ hg merge
1330 $ hg merge
1331 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1331 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1332 (branch merge, don't forget to commit)
1332 (branch merge, don't forget to commit)
1333 getting changed largefiles
1333 getting changed largefiles
1334 1 largefiles updated, 0 removed
1334 1 largefiles updated, 0 removed
1335 $ hg status
1335 $ hg status
1336 M large
1336 M large
1337
1337
1338 - make sure update of merge with removed largefiles fails as expected
1338 - make sure update of merge with removed largefiles fails as expected
1339 $ hg rm sub2/large6
1339 $ hg rm sub2/large6
1340 $ hg up -r.
1340 $ hg up -r.
1341 abort: outstanding uncommitted merges
1341 abort: outstanding uncommitted merges
1342 [255]
1342 [255]
1343
1343
1344 - revert should be able to revert files introduced in a pending merge
1344 - revert should be able to revert files introduced in a pending merge
1345 $ hg revert --all -r .
1345 $ hg revert --all -r .
1346 removing .hglf/large
1346 removing .hglf/large
1347 undeleting .hglf/sub2/large6
1347 undeleting .hglf/sub2/large6
1348
1348
1349 Test that a normal file and a largefile with the same name and path cannot
1349 Test that a normal file and a largefile with the same name and path cannot
1350 coexist.
1350 coexist.
1351
1351
1352 $ rm sub2/large7
1352 $ rm sub2/large7
1353 $ echo "largeasnormal" > sub2/large7
1353 $ echo "largeasnormal" > sub2/large7
1354 $ hg add sub2/large7
1354 $ hg add sub2/large7
1355 sub2/large7 already a largefile
1355 sub2/large7 already a largefile
1356
1356
1357 Test that transplanting a largefile change works correctly.
1357 Test that transplanting a largefile change works correctly.
1358
1358
1359 $ cd ..
1359 $ cd ..
1360 $ hg clone -r 8 d g
1360 $ hg clone -r 8 d g
1361 adding changesets
1361 adding changesets
1362 adding manifests
1362 adding manifests
1363 adding file changes
1363 adding file changes
1364 added 9 changesets with 26 changes to 10 files
1364 added 9 changesets with 26 changes to 10 files
1365 updating to branch default
1365 updating to branch default
1366 getting changed largefiles
1366 getting changed largefiles
1367 3 largefiles updated, 0 removed
1367 3 largefiles updated, 0 removed
1368 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1368 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1369 $ cd g
1369 $ cd g
1370 $ hg transplant -s ../d 598410d3eb9a
1370 $ hg transplant -s ../d 598410d3eb9a
1371 searching for changes
1371 searching for changes
1372 searching for changes
1372 searching for changes
1373 adding changesets
1373 adding changesets
1374 adding manifests
1374 adding manifests
1375 adding file changes
1375 adding file changes
1376 added 1 changesets with 2 changes to 2 files
1376 added 1 changesets with 2 changes to 2 files
1377 getting changed largefiles
1377 getting changed largefiles
1378 1 largefiles updated, 0 removed
1378 1 largefiles updated, 0 removed
1379 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1379 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1380 9:598410d3eb9a modify normal file largefile in repo d
1380 9:598410d3eb9a modify normal file largefile in repo d
1381 8:a381d2c8c80e modify normal file and largefile in repo b
1381 8:a381d2c8c80e modify normal file and largefile in repo b
1382 7:daea875e9014 add/edit more largefiles
1382 7:daea875e9014 add/edit more largefiles
1383 6:4355d653f84f edit files yet again
1383 6:4355d653f84f edit files yet again
1384 5:9d5af5072dbd edit files again
1384 5:9d5af5072dbd edit files again
1385 4:74c02385b94c move files
1385 4:74c02385b94c move files
1386 3:9e8fbc4bce62 copy files
1386 3:9e8fbc4bce62 copy files
1387 2:51a0ae4d5864 remove files
1387 2:51a0ae4d5864 remove files
1388 1:ce8896473775 edit files
1388 1:ce8896473775 edit files
1389 0:30d30fe6a5be add files
1389 0:30d30fe6a5be add files
1390 $ cat normal3
1390 $ cat normal3
1391 normal3-modified
1391 normal3-modified
1392 $ cat sub/normal4
1392 $ cat sub/normal4
1393 normal4-modified
1393 normal4-modified
1394 $ cat sub/large4
1394 $ cat sub/large4
1395 large4-modified
1395 large4-modified
1396 $ cat sub2/large6
1396 $ cat sub2/large6
1397 large6-modified
1397 large6-modified
1398 $ cat sub2/large7
1398 $ cat sub2/large7
1399 large7
1399 large7
1400
1400
1401 Cat a largefile
1401 Cat a largefile
1402 $ hg cat normal3
1402 $ hg cat normal3
1403 normal3-modified
1403 normal3-modified
1404 $ hg cat sub/large4
1404 $ hg cat sub/large4
1405 large4-modified
1405 large4-modified
1406 $ rm "${USERCACHE}"/*
1406 $ rm "${USERCACHE}"/*
1407 $ hg cat -r a381d2c8c80e -o cat.out sub/large4
1407 $ hg cat -r a381d2c8c80e -o cat.out sub/large4
1408 $ cat cat.out
1408 $ cat cat.out
1409 large4-modified
1409 large4-modified
1410 $ rm cat.out
1410 $ rm cat.out
1411 $ hg cat -r a381d2c8c80e normal3
1411 $ hg cat -r a381d2c8c80e normal3
1412 normal3-modified
1412 normal3-modified
1413 $ hg cat -r '.^' normal3
1413 $ hg cat -r '.^' normal3
1414 normal3-modified
1414 normal3-modified
1415 $ hg cat -r '.^' sub/large4
1415 $ hg cat -r '.^' sub/large4
1416 large4-modified
1416 large4-modified
1417
1417
1418 Test that renaming a largefile results in correct output for status
1418 Test that renaming a largefile results in correct output for status
1419
1419
1420 $ hg rename sub/large4 large4-renamed
1420 $ hg rename sub/large4 large4-renamed
1421 $ hg commit -m "test rename output"
1421 $ hg commit -m "test rename output"
1422 Invoking status precommit hook
1422 Invoking status precommit hook
1423 A large4-renamed
1423 A large4-renamed
1424 R sub/large4
1424 R sub/large4
1425 $ cat large4-renamed
1425 $ cat large4-renamed
1426 large4-modified
1426 large4-modified
1427 $ cd sub2
1427 $ cd sub2
1428 $ hg rename large6 large6-renamed
1428 $ hg rename large6 large6-renamed
1429 $ hg st
1429 $ hg st
1430 A sub2/large6-renamed
1430 A sub2/large6-renamed
1431 R sub2/large6
1431 R sub2/large6
1432 $ cd ..
1432 $ cd ..
1433
1433
1434 Test --normal flag
1434 Test --normal flag
1435
1435
1436 $ dd if=/dev/zero bs=2k count=11k > new-largefile 2> /dev/null
1436 $ dd if=/dev/zero bs=2k count=11k > new-largefile 2> /dev/null
1437 $ hg add --normal --large new-largefile
1437 $ hg add --normal --large new-largefile
1438 abort: --normal cannot be used with --large
1438 abort: --normal cannot be used with --large
1439 [255]
1439 [255]
1440 $ hg add --normal new-largefile
1440 $ hg add --normal new-largefile
1441 new-largefile: up to 69 MB of RAM may be required to manage this file
1441 new-largefile: up to 69 MB of RAM may be required to manage this file
1442 (use 'hg revert new-largefile' to cancel the pending addition)
1442 (use 'hg revert new-largefile' to cancel the pending addition)
1443 $ cd ..
1443 $ cd ..
1444
1444
1445 #if serve
1445 #if serve
1446 vanilla clients not locked out from largefiles servers on vanilla repos
1446 vanilla clients not locked out from largefiles servers on vanilla repos
1447 $ mkdir r1
1447 $ mkdir r1
1448 $ cd r1
1448 $ cd r1
1449 $ hg init
1449 $ hg init
1450 $ echo c1 > f1
1450 $ echo c1 > f1
1451 $ hg add f1
1451 $ hg add f1
1452 $ hg commit -m "m1"
1452 $ hg commit -m "m1"
1453 Invoking status precommit hook
1453 Invoking status precommit hook
1454 A f1
1454 A f1
1455 $ cd ..
1455 $ cd ..
1456 $ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid
1456 $ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid
1457 $ cat hg.pid >> $DAEMON_PIDS
1457 $ cat hg.pid >> $DAEMON_PIDS
1458 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2
1458 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2
1459 requesting all changes
1459 requesting all changes
1460 adding changesets
1460 adding changesets
1461 adding manifests
1461 adding manifests
1462 adding file changes
1462 adding file changes
1463 added 1 changesets with 1 changes to 1 files
1463 added 1 changesets with 1 changes to 1 files
1464 updating to branch default
1464 updating to branch default
1465 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1465 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1466
1466
1467 largefiles clients still work with vanilla servers
1467 largefiles clients still work with vanilla servers
1468 $ hg --config extensions.largefiles=! serve -R r1 -d -p $HGPORT1 --pid-file hg.pid
1468 $ hg --config extensions.largefiles=! serve -R r1 -d -p $HGPORT1 --pid-file hg.pid
1469 $ cat hg.pid >> $DAEMON_PIDS
1469 $ cat hg.pid >> $DAEMON_PIDS
1470 $ hg clone http://localhost:$HGPORT1 r3
1470 $ hg clone http://localhost:$HGPORT1 r3
1471 requesting all changes
1471 requesting all changes
1472 adding changesets
1472 adding changesets
1473 adding manifests
1473 adding manifests
1474 adding file changes
1474 adding file changes
1475 added 1 changesets with 1 changes to 1 files
1475 added 1 changesets with 1 changes to 1 files
1476 updating to branch default
1476 updating to branch default
1477 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1477 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1478 #endif
1478 #endif
1479
1479
1480
1480
1481 vanilla clients locked out from largefiles http repos
1481 vanilla clients locked out from largefiles http repos
1482 $ mkdir r4
1482 $ mkdir r4
1483 $ cd r4
1483 $ cd r4
1484 $ hg init
1484 $ hg init
1485 $ echo c1 > f1
1485 $ echo c1 > f1
1486 $ hg add --large f1
1486 $ hg add --large f1
1487 $ hg commit -m "m1"
1487 $ hg commit -m "m1"
1488 Invoking status precommit hook
1488 Invoking status precommit hook
1489 A f1
1489 A f1
1490 $ cd ..
1490 $ cd ..
1491
1491
1492 largefiles can be pushed locally (issue3583)
1492 largefiles can be pushed locally (issue3583)
1493 $ hg init dest
1493 $ hg init dest
1494 $ cd r4
1494 $ cd r4
1495 $ hg outgoing ../dest
1495 $ hg outgoing ../dest
1496 comparing with ../dest
1496 comparing with ../dest
1497 searching for changes
1497 searching for changes
1498 changeset: 0:639881c12b4c
1498 changeset: 0:639881c12b4c
1499 tag: tip
1499 tag: tip
1500 user: test
1500 user: test
1501 date: Thu Jan 01 00:00:00 1970 +0000
1501 date: Thu Jan 01 00:00:00 1970 +0000
1502 summary: m1
1502 summary: m1
1503
1503
1504 $ hg push ../dest
1504 $ hg push ../dest
1505 pushing to ../dest
1505 pushing to ../dest
1506 searching for changes
1506 searching for changes
1507 searching for changes
1507 searching for changes
1508 adding changesets
1508 adding changesets
1509 adding manifests
1509 adding manifests
1510 adding file changes
1510 adding file changes
1511 added 1 changesets with 1 changes to 1 files
1511 added 1 changesets with 1 changes to 1 files
1512
1512
1513 exit code with nothing outgoing (issue3611)
1513 exit code with nothing outgoing (issue3611)
1514 $ hg outgoing ../dest
1514 $ hg outgoing ../dest
1515 comparing with ../dest
1515 comparing with ../dest
1516 searching for changes
1516 searching for changes
1517 no changes found
1517 no changes found
1518 [1]
1518 [1]
1519 $ cd ..
1519 $ cd ..
1520
1520
1521 #if serve
1521 #if serve
1522 $ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid
1522 $ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid
1523 $ cat hg.pid >> $DAEMON_PIDS
1523 $ cat hg.pid >> $DAEMON_PIDS
1524 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5
1524 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5
1525 abort: remote error:
1525 abort: remote error:
1526
1526
1527 This repository uses the largefiles extension.
1527 This repository uses the largefiles extension.
1528
1528
1529 Please enable it in your Mercurial config file.
1529 Please enable it in your Mercurial config file.
1530 [255]
1530 [255]
1531
1531
1532 used all HGPORTs, kill all daemons
1532 used all HGPORTs, kill all daemons
1533 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1533 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1534 #endif
1534 #endif
1535
1535
1536 vanilla clients locked out from largefiles ssh repos
1536 vanilla clients locked out from largefiles ssh repos
1537 $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5
1537 $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5
1538 abort: remote error:
1538 abort: remote error:
1539
1539
1540 This repository uses the largefiles extension.
1540 This repository uses the largefiles extension.
1541
1541
1542 Please enable it in your Mercurial config file.
1542 Please enable it in your Mercurial config file.
1543 [255]
1543 [255]
1544
1544
1545 #if serve
1545 #if serve
1546
1546
1547 largefiles clients refuse to push largefiles repos to vanilla servers
1547 largefiles clients refuse to push largefiles repos to vanilla servers
1548 $ mkdir r6
1548 $ mkdir r6
1549 $ cd r6
1549 $ cd r6
1550 $ hg init
1550 $ hg init
1551 $ echo c1 > f1
1551 $ echo c1 > f1
1552 $ hg add f1
1552 $ hg add f1
1553 $ hg commit -m "m1"
1553 $ hg commit -m "m1"
1554 Invoking status precommit hook
1554 Invoking status precommit hook
1555 A f1
1555 A f1
1556 $ cat >> .hg/hgrc <<!
1556 $ cat >> .hg/hgrc <<!
1557 > [web]
1557 > [web]
1558 > push_ssl = false
1558 > push_ssl = false
1559 > allow_push = *
1559 > allow_push = *
1560 > !
1560 > !
1561 $ cd ..
1561 $ cd ..
1562 $ hg clone r6 r7
1562 $ hg clone r6 r7
1563 updating to branch default
1563 updating to branch default
1564 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1564 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1565 $ cd r7
1565 $ cd r7
1566 $ echo c2 > f2
1566 $ echo c2 > f2
1567 $ hg add --large f2
1567 $ hg add --large f2
1568 $ hg commit -m "m2"
1568 $ hg commit -m "m2"
1569 Invoking status precommit hook
1569 Invoking status precommit hook
1570 A f2
1570 A f2
1571 $ hg --config extensions.largefiles=! -R ../r6 serve -d -p $HGPORT --pid-file ../hg.pid
1571 $ hg --config extensions.largefiles=! -R ../r6 serve -d -p $HGPORT --pid-file ../hg.pid
1572 $ cat ../hg.pid >> $DAEMON_PIDS
1572 $ cat ../hg.pid >> $DAEMON_PIDS
1573 $ hg push http://localhost:$HGPORT
1573 $ hg push http://localhost:$HGPORT
1574 pushing to http://localhost:$HGPORT/
1574 pushing to http://localhost:$HGPORT/
1575 searching for changes
1575 searching for changes
1576 abort: http://localhost:$HGPORT/ does not appear to be a largefile store
1576 abort: http://localhost:$HGPORT/ does not appear to be a largefile store
1577 [255]
1577 [255]
1578 $ cd ..
1578 $ cd ..
1579
1579
1580 putlfile errors are shown (issue3123)
1580 putlfile errors are shown (issue3123)
1581 Corrupt the cached largefile in r7 and move it out of the servers usercache
1581 Corrupt the cached largefile in r7 and move it out of the servers usercache
1582 $ mv r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 .
1582 $ mv r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 .
1583 $ echo 'client side corruption' > r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1583 $ echo 'client side corruption' > r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1584 $ rm "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8"
1584 $ rm "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8"
1585 $ hg init empty
1585 $ hg init empty
1586 $ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \
1586 $ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \
1587 > --config 'web.allow_push=*' --config web.push_ssl=False
1587 > --config 'web.allow_push=*' --config web.push_ssl=False
1588 $ cat hg.pid >> $DAEMON_PIDS
1588 $ cat hg.pid >> $DAEMON_PIDS
1589 $ hg push -R r7 http://localhost:$HGPORT1
1589 $ hg push -R r7 http://localhost:$HGPORT1
1590 pushing to http://localhost:$HGPORT1/
1590 pushing to http://localhost:$HGPORT1/
1591 searching for changes
1591 searching for changes
1592 remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash
1592 remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash
1593 abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob)
1593 abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob)
1594 [255]
1594 [255]
1595 $ mv 4cdac4d8b084d0b599525cf732437fb337d422a8 r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1595 $ mv 4cdac4d8b084d0b599525cf732437fb337d422a8 r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1596 Push of file that exists on server but is corrupted - magic healing would be nice ... but too magic
1596 Push of file that exists on server but is corrupted - magic healing would be nice ... but too magic
1597 $ echo "server side corruption" > empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1597 $ echo "server side corruption" > empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1598 $ hg push -R r7 http://localhost:$HGPORT1
1598 $ hg push -R r7 http://localhost:$HGPORT1
1599 pushing to http://localhost:$HGPORT1/
1599 pushing to http://localhost:$HGPORT1/
1600 searching for changes
1600 searching for changes
1601 searching for changes
1601 searching for changes
1602 remote: adding changesets
1602 remote: adding changesets
1603 remote: adding manifests
1603 remote: adding manifests
1604 remote: adding file changes
1604 remote: adding file changes
1605 remote: added 2 changesets with 2 changes to 2 files
1605 remote: added 2 changesets with 2 changes to 2 files
1606 $ cat empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1606 $ cat empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1607 server side corruption
1607 server side corruption
1608 $ rm -rf empty
1608 $ rm -rf empty
1609
1609
1610 Push a largefiles repository to a served empty repository
1610 Push a largefiles repository to a served empty repository
1611 $ hg init r8
1611 $ hg init r8
1612 $ echo c3 > r8/f1
1612 $ echo c3 > r8/f1
1613 $ hg add --large r8/f1 -R r8
1613 $ hg add --large r8/f1 -R r8
1614 $ hg commit -m "m1" -R r8
1614 $ hg commit -m "m1" -R r8
1615 Invoking status precommit hook
1615 Invoking status precommit hook
1616 A f1
1616 A f1
1617 $ hg init empty
1617 $ hg init empty
1618 $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
1618 $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
1619 > --config 'web.allow_push=*' --config web.push_ssl=False
1619 > --config 'web.allow_push=*' --config web.push_ssl=False
1620 $ cat hg.pid >> $DAEMON_PIDS
1620 $ cat hg.pid >> $DAEMON_PIDS
1621 $ rm "${USERCACHE}"/*
1621 $ rm "${USERCACHE}"/*
1622 $ hg push -R r8 http://localhost:$HGPORT2
1622 $ hg push -R r8 http://localhost:$HGPORT2/#default
1623 pushing to http://localhost:$HGPORT2/
1623 pushing to http://localhost:$HGPORT2/
1624 searching for changes
1624 searching for changes
1625 searching for changes
1625 searching for changes
1626 remote: adding changesets
1626 remote: adding changesets
1627 remote: adding manifests
1627 remote: adding manifests
1628 remote: adding file changes
1628 remote: adding file changes
1629 remote: added 1 changesets with 1 changes to 1 files
1629 remote: added 1 changesets with 1 changes to 1 files
1630 $ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1630 $ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1631 $ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1631 $ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1632
1632
1633 Clone over http, no largefiles pulled on clone.
1633 Clone over http, no largefiles pulled on clone.
1634
1634
1635 $ hg clone http://localhost:$HGPORT2/ http-clone -U
1635 $ hg clone http://localhost:$HGPORT2/#default http-clone -U
1636 requesting all changes
1637 adding changesets
1636 adding changesets
1638 adding manifests
1637 adding manifests
1639 adding file changes
1638 adding file changes
1640 added 1 changesets with 1 changes to 1 files
1639 added 1 changesets with 1 changes to 1 files
1641
1640
1642 test 'verify' with remotestore:
1641 test 'verify' with remotestore:
1643
1642
1644 $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
1643 $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
1645 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1644 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1646 $ hg -R http-clone verify --large --lfa
1645 $ hg -R http-clone verify --large --lfa
1647 checking changesets
1646 checking changesets
1648 checking manifests
1647 checking manifests
1649 crosschecking files in changesets and manifests
1648 crosschecking files in changesets and manifests
1650 checking files
1649 checking files
1651 1 files, 1 changesets, 1 total revisions
1650 1 files, 1 changesets, 1 total revisions
1652 searching 1 changesets for largefiles
1651 searching 1 changesets for largefiles
1653 changeset 0:cf03e5bb9936: f1 missing
1652 changeset 0:cf03e5bb9936: f1 missing
1654 verified existence of 1 revisions of 1 largefiles
1653 verified existence of 1 revisions of 1 largefiles
1655 [1]
1654 [1]
1656 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1655 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1657 $ hg -R http-clone -q verify --large --lfa
1656 $ hg -R http-clone -q verify --large --lfa
1658 searching 1 changesets for largefiles
1657 searching 1 changesets for largefiles
1659 verified existence of 1 revisions of 1 largefiles
1658 verified existence of 1 revisions of 1 largefiles
1660
1659
1661 largefiles pulled on update - a largefile missing on the server:
1660 largefiles pulled on update - a largefile missing on the server:
1662 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1661 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1663 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1662 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1664 getting changed largefiles
1663 getting changed largefiles
1665 abort: remotestore: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 is missing
1664 abort: remotestore: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 is missing
1666 [255]
1665 [255]
1667 $ hg -R http-clone up -Cqr null
1666 $ hg -R http-clone up -Cqr null
1668
1667
1669 largefiles pulled on update - a largefile corrupted on the server:
1668 largefiles pulled on update - a largefile corrupted on the server:
1670 $ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
1669 $ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
1671 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1670 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1672 getting changed largefiles
1671 getting changed largefiles
1673 f1: data corruption (expected 02a439e5c31c526465ab1a0ca1f431f76b827b90, got 6a7bb2556144babe3899b25e5428123735bb1e27)
1672 f1: data corruption (expected 02a439e5c31c526465ab1a0ca1f431f76b827b90, got 6a7bb2556144babe3899b25e5428123735bb1e27)
1674 0 largefiles updated, 0 removed
1673 0 largefiles updated, 0 removed
1675 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1674 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1676 $ hg -R http-clone st
1675 $ hg -R http-clone st
1677 ! f1
1676 ! f1
1678 $ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1677 $ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1679 $ [ ! -f http-clone/f1 ]
1678 $ [ ! -f http-clone/f1 ]
1680 $ [ ! -f http-clone-usercache ]
1679 $ [ ! -f http-clone-usercache ]
1681 $ hg -R http-clone verify --large --lfc
1680 $ hg -R http-clone verify --large --lfc
1682 checking changesets
1681 checking changesets
1683 checking manifests
1682 checking manifests
1684 crosschecking files in changesets and manifests
1683 crosschecking files in changesets and manifests
1685 checking files
1684 checking files
1686 1 files, 1 changesets, 1 total revisions
1685 1 files, 1 changesets, 1 total revisions
1687 searching 1 changesets for largefiles
1686 searching 1 changesets for largefiles
1688 verified contents of 1 revisions of 1 largefiles
1687 verified contents of 1 revisions of 1 largefiles
1689 $ hg -R http-clone up -Cqr null
1688 $ hg -R http-clone up -Cqr null
1690
1689
1691 largefiles pulled on update - no server side problems:
1690 largefiles pulled on update - no server side problems:
1692 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1691 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1693 $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache
1692 $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache
1694 resolving manifests
1693 resolving manifests
1695 overwrite: False, partial: False
1694 overwrite: False, partial: False
1696 ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936
1695 ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936
1697 .hglf/f1: remote created -> g
1696 .hglf/f1: remote created -> g
1698 updating: .hglf/f1 1/1 files (100.00%)
1697 updating: .hglf/f1 1/1 files (100.00%)
1699 getting .hglf/f1
1698 getting .hglf/f1
1700 getting changed largefiles
1699 getting changed largefiles
1701 using http://localhost:$HGPORT2/
1700 using http://localhost:$HGPORT2/
1702 sending capabilities command
1701 sending capabilities command
1703 getting largefiles: 0/1 lfile (0.00%)
1702 getting largefiles: 0/1 lfile (0.00%)
1704 getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90
1703 getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90
1705 sending batch command
1704 sending batch command
1706 sending getlfile command
1705 sending getlfile command
1707 found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store
1706 found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store
1708 1 largefiles updated, 0 removed
1707 1 largefiles updated, 0 removed
1709 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1708 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1710
1709
1711 $ ls http-clone-usercache/*
1710 $ ls http-clone-usercache/*
1712 http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
1711 http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
1713
1712
1714 $ rm -rf empty http-clone*
1713 $ rm -rf empty http-clone*
1715
1714
1716 used all HGPORTs, kill all daemons
1715 used all HGPORTs, kill all daemons
1717 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1716 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1718
1717
1719 #endif
1718 #endif
1720
1719
1721
1720
1722 #if unix-permissions
1721 #if unix-permissions
1723
1722
1724 Clone a local repository owned by another user
1723 Clone a local repository owned by another user
1725 We have to simulate that here by setting $HOME and removing write permissions
1724 We have to simulate that here by setting $HOME and removing write permissions
1726 $ ORIGHOME="$HOME"
1725 $ ORIGHOME="$HOME"
1727 $ mkdir alice
1726 $ mkdir alice
1728 $ HOME="`pwd`/alice"
1727 $ HOME="`pwd`/alice"
1729 $ cd alice
1728 $ cd alice
1730 $ hg init pubrepo
1729 $ hg init pubrepo
1731 $ cd pubrepo
1730 $ cd pubrepo
1732 $ dd if=/dev/zero bs=1k count=11k > a-large-file 2> /dev/null
1731 $ dd if=/dev/zero bs=1k count=11k > a-large-file 2> /dev/null
1733 $ hg add --large a-large-file
1732 $ hg add --large a-large-file
1734 $ hg commit -m "Add a large file"
1733 $ hg commit -m "Add a large file"
1735 Invoking status precommit hook
1734 Invoking status precommit hook
1736 A a-large-file
1735 A a-large-file
1737 $ cd ..
1736 $ cd ..
1738 $ chmod -R a-w pubrepo
1737 $ chmod -R a-w pubrepo
1739 $ cd ..
1738 $ cd ..
1740 $ mkdir bob
1739 $ mkdir bob
1741 $ HOME="`pwd`/bob"
1740 $ HOME="`pwd`/bob"
1742 $ cd bob
1741 $ cd bob
1743 $ hg clone --pull ../alice/pubrepo pubrepo
1742 $ hg clone --pull ../alice/pubrepo pubrepo
1744 requesting all changes
1743 requesting all changes
1745 adding changesets
1744 adding changesets
1746 adding manifests
1745 adding manifests
1747 adding file changes
1746 adding file changes
1748 added 1 changesets with 1 changes to 1 files
1747 added 1 changesets with 1 changes to 1 files
1749 updating to branch default
1748 updating to branch default
1750 getting changed largefiles
1749 getting changed largefiles
1751 1 largefiles updated, 0 removed
1750 1 largefiles updated, 0 removed
1752 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1751 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1753 $ cd ..
1752 $ cd ..
1754 $ chmod -R u+w alice/pubrepo
1753 $ chmod -R u+w alice/pubrepo
1755 $ HOME="$ORIGHOME"
1754 $ HOME="$ORIGHOME"
1756
1755
1757 #endif
1756 #endif
1758
1757
1759 #if symlink
1758 #if symlink
1760
1759
1761 Symlink to a large largefile should behave the same as a symlink to a normal file
1760 Symlink to a large largefile should behave the same as a symlink to a normal file
1762 $ hg init largesymlink
1761 $ hg init largesymlink
1763 $ cd largesymlink
1762 $ cd largesymlink
1764 $ dd if=/dev/zero bs=1k count=10k of=largefile 2>/dev/null
1763 $ dd if=/dev/zero bs=1k count=10k of=largefile 2>/dev/null
1765 $ hg add --large largefile
1764 $ hg add --large largefile
1766 $ hg commit -m "commit a large file"
1765 $ hg commit -m "commit a large file"
1767 Invoking status precommit hook
1766 Invoking status precommit hook
1768 A largefile
1767 A largefile
1769 $ ln -s largefile largelink
1768 $ ln -s largefile largelink
1770 $ hg add largelink
1769 $ hg add largelink
1771 $ hg commit -m "commit a large symlink"
1770 $ hg commit -m "commit a large symlink"
1772 Invoking status precommit hook
1771 Invoking status precommit hook
1773 A largelink
1772 A largelink
1774 $ rm -f largelink
1773 $ rm -f largelink
1775 $ hg up >/dev/null
1774 $ hg up >/dev/null
1776 $ test -f largelink
1775 $ test -f largelink
1777 [1]
1776 [1]
1778 $ test -L largelink
1777 $ test -L largelink
1779 [1]
1778 [1]
1780 $ rm -f largelink # make next part of the test independent of the previous
1779 $ rm -f largelink # make next part of the test independent of the previous
1781 $ hg up -C >/dev/null
1780 $ hg up -C >/dev/null
1782 $ test -f largelink
1781 $ test -f largelink
1783 $ test -L largelink
1782 $ test -L largelink
1784 $ cd ..
1783 $ cd ..
1785
1784
1786 #endif
1785 #endif
1787
1786
1788 test for pattern matching on 'hg status':
1787 test for pattern matching on 'hg status':
1789 to boost performance, largefiles checks whether specified patterns are
1788 to boost performance, largefiles checks whether specified patterns are
1790 related to largefiles in working directory (NOT to STANDIN) or not.
1789 related to largefiles in working directory (NOT to STANDIN) or not.
1791
1790
1792 $ hg init statusmatch
1791 $ hg init statusmatch
1793 $ cd statusmatch
1792 $ cd statusmatch
1794
1793
1795 $ mkdir -p a/b/c/d
1794 $ mkdir -p a/b/c/d
1796 $ echo normal > a/b/c/d/e.normal.txt
1795 $ echo normal > a/b/c/d/e.normal.txt
1797 $ hg add a/b/c/d/e.normal.txt
1796 $ hg add a/b/c/d/e.normal.txt
1798 $ echo large > a/b/c/d/e.large.txt
1797 $ echo large > a/b/c/d/e.large.txt
1799 $ hg add --large a/b/c/d/e.large.txt
1798 $ hg add --large a/b/c/d/e.large.txt
1800 $ mkdir -p a/b/c/x
1799 $ mkdir -p a/b/c/x
1801 $ echo normal > a/b/c/x/y.normal.txt
1800 $ echo normal > a/b/c/x/y.normal.txt
1802 $ hg add a/b/c/x/y.normal.txt
1801 $ hg add a/b/c/x/y.normal.txt
1803 $ hg commit -m 'add files'
1802 $ hg commit -m 'add files'
1804 Invoking status precommit hook
1803 Invoking status precommit hook
1805 A a/b/c/d/e.large.txt
1804 A a/b/c/d/e.large.txt
1806 A a/b/c/d/e.normal.txt
1805 A a/b/c/d/e.normal.txt
1807 A a/b/c/x/y.normal.txt
1806 A a/b/c/x/y.normal.txt
1808
1807
1809 (1) no pattern: no performance boost
1808 (1) no pattern: no performance boost
1810 $ hg status -A
1809 $ hg status -A
1811 C a/b/c/d/e.large.txt
1810 C a/b/c/d/e.large.txt
1812 C a/b/c/d/e.normal.txt
1811 C a/b/c/d/e.normal.txt
1813 C a/b/c/x/y.normal.txt
1812 C a/b/c/x/y.normal.txt
1814
1813
1815 (2) pattern not related to largefiles: performance boost
1814 (2) pattern not related to largefiles: performance boost
1816 $ hg status -A a/b/c/x
1815 $ hg status -A a/b/c/x
1817 C a/b/c/x/y.normal.txt
1816 C a/b/c/x/y.normal.txt
1818
1817
1819 (3) pattern related to largefiles: no performance boost
1818 (3) pattern related to largefiles: no performance boost
1820 $ hg status -A a/b/c/d
1819 $ hg status -A a/b/c/d
1821 C a/b/c/d/e.large.txt
1820 C a/b/c/d/e.large.txt
1822 C a/b/c/d/e.normal.txt
1821 C a/b/c/d/e.normal.txt
1823
1822
1824 (4) pattern related to STANDIN (not to largefiles): performance boost
1823 (4) pattern related to STANDIN (not to largefiles): performance boost
1825 $ hg status -A .hglf/a
1824 $ hg status -A .hglf/a
1826 C .hglf/a/b/c/d/e.large.txt
1825 C .hglf/a/b/c/d/e.large.txt
1827
1826
1828 (5) mixed case: no performance boost
1827 (5) mixed case: no performance boost
1829 $ hg status -A a/b/c/x a/b/c/d
1828 $ hg status -A a/b/c/x a/b/c/d
1830 C a/b/c/d/e.large.txt
1829 C a/b/c/d/e.large.txt
1831 C a/b/c/d/e.normal.txt
1830 C a/b/c/d/e.normal.txt
1832 C a/b/c/x/y.normal.txt
1831 C a/b/c/x/y.normal.txt
1833
1832
1834 verify that largefiles doesn't break filesets
1833 verify that largefiles doesn't break filesets
1835
1834
1836 $ hg log --rev . --exclude "set:binary()"
1835 $ hg log --rev . --exclude "set:binary()"
1837 changeset: 0:41bd42f10efa
1836 changeset: 0:41bd42f10efa
1838 tag: tip
1837 tag: tip
1839 user: test
1838 user: test
1840 date: Thu Jan 01 00:00:00 1970 +0000
1839 date: Thu Jan 01 00:00:00 1970 +0000
1841 summary: add files
1840 summary: add files
1842
1841
1843 verify that large files in subrepos handled properly
1842 verify that large files in subrepos handled properly
1844 $ hg init subrepo
1843 $ hg init subrepo
1845 $ echo "subrepo = subrepo" > .hgsub
1844 $ echo "subrepo = subrepo" > .hgsub
1846 $ hg add .hgsub
1845 $ hg add .hgsub
1847 $ hg ci -m "add subrepo"
1846 $ hg ci -m "add subrepo"
1848 Invoking status precommit hook
1847 Invoking status precommit hook
1849 A .hgsub
1848 A .hgsub
1850 ? .hgsubstate
1849 ? .hgsubstate
1851 $ echo "rev 1" > subrepo/large.txt
1850 $ echo "rev 1" > subrepo/large.txt
1852 $ hg -R subrepo add --large subrepo/large.txt
1851 $ hg -R subrepo add --large subrepo/large.txt
1853 $ hg sum
1852 $ hg sum
1854 parent: 1:8ee150ea2e9c tip
1853 parent: 1:8ee150ea2e9c tip
1855 add subrepo
1854 add subrepo
1856 branch: default
1855 branch: default
1857 commit: 1 subrepos
1856 commit: 1 subrepos
1858 update: (current)
1857 update: (current)
1859 $ hg st
1858 $ hg st
1860 $ hg st -S
1859 $ hg st -S
1861 A subrepo/large.txt
1860 A subrepo/large.txt
1862 $ hg ci -S -m "commit top repo"
1861 $ hg ci -S -m "commit top repo"
1863 committing subrepository subrepo
1862 committing subrepository subrepo
1864 Invoking status precommit hook
1863 Invoking status precommit hook
1865 A large.txt
1864 A large.txt
1866 Invoking status precommit hook
1865 Invoking status precommit hook
1867 M .hgsubstate
1866 M .hgsubstate
1868 # No differences
1867 # No differences
1869 $ hg st -S
1868 $ hg st -S
1870 $ hg sum
1869 $ hg sum
1871 parent: 2:ce4cd0c527a6 tip
1870 parent: 2:ce4cd0c527a6 tip
1872 commit top repo
1871 commit top repo
1873 branch: default
1872 branch: default
1874 commit: (clean)
1873 commit: (clean)
1875 update: (current)
1874 update: (current)
1876 $ echo "rev 2" > subrepo/large.txt
1875 $ echo "rev 2" > subrepo/large.txt
1877 $ hg st -S
1876 $ hg st -S
1878 M subrepo/large.txt
1877 M subrepo/large.txt
1879 $ hg sum
1878 $ hg sum
1880 parent: 2:ce4cd0c527a6 tip
1879 parent: 2:ce4cd0c527a6 tip
1881 commit top repo
1880 commit top repo
1882 branch: default
1881 branch: default
1883 commit: 1 subrepos
1882 commit: 1 subrepos
1884 update: (current)
1883 update: (current)
1885 $ hg ci -m "this commit should fail without -S"
1884 $ hg ci -m "this commit should fail without -S"
1886 abort: uncommitted changes in subrepo subrepo
1885 abort: uncommitted changes in subrepo subrepo
1887 (use --subrepos for recursive commit)
1886 (use --subrepos for recursive commit)
1888 [255]
1887 [255]
1889
1888
1890 Add a normal file to the subrepo, then test archiving
1889 Add a normal file to the subrepo, then test archiving
1891
1890
1892 $ echo 'normal file' > subrepo/normal.txt
1891 $ echo 'normal file' > subrepo/normal.txt
1893 $ hg -R subrepo add subrepo/normal.txt
1892 $ hg -R subrepo add subrepo/normal.txt
1894
1893
1895 Lock in subrepo, otherwise the change isn't archived
1894 Lock in subrepo, otherwise the change isn't archived
1896
1895
1897 $ hg ci -S -m "add normal file to top level"
1896 $ hg ci -S -m "add normal file to top level"
1898 committing subrepository subrepo
1897 committing subrepository subrepo
1899 Invoking status precommit hook
1898 Invoking status precommit hook
1900 M large.txt
1899 M large.txt
1901 A normal.txt
1900 A normal.txt
1902 Invoking status precommit hook
1901 Invoking status precommit hook
1903 M .hgsubstate
1902 M .hgsubstate
1904 $ hg archive -S ../lf_subrepo_archive
1903 $ hg archive -S ../lf_subrepo_archive
1905 $ find ../lf_subrepo_archive | sort
1904 $ find ../lf_subrepo_archive | sort
1906 ../lf_subrepo_archive
1905 ../lf_subrepo_archive
1907 ../lf_subrepo_archive/.hg_archival.txt
1906 ../lf_subrepo_archive/.hg_archival.txt
1908 ../lf_subrepo_archive/.hgsub
1907 ../lf_subrepo_archive/.hgsub
1909 ../lf_subrepo_archive/.hgsubstate
1908 ../lf_subrepo_archive/.hgsubstate
1910 ../lf_subrepo_archive/a
1909 ../lf_subrepo_archive/a
1911 ../lf_subrepo_archive/a/b
1910 ../lf_subrepo_archive/a/b
1912 ../lf_subrepo_archive/a/b/c
1911 ../lf_subrepo_archive/a/b/c
1913 ../lf_subrepo_archive/a/b/c/d
1912 ../lf_subrepo_archive/a/b/c/d
1914 ../lf_subrepo_archive/a/b/c/d/e.large.txt
1913 ../lf_subrepo_archive/a/b/c/d/e.large.txt
1915 ../lf_subrepo_archive/a/b/c/d/e.normal.txt
1914 ../lf_subrepo_archive/a/b/c/d/e.normal.txt
1916 ../lf_subrepo_archive/a/b/c/x
1915 ../lf_subrepo_archive/a/b/c/x
1917 ../lf_subrepo_archive/a/b/c/x/y.normal.txt
1916 ../lf_subrepo_archive/a/b/c/x/y.normal.txt
1918 ../lf_subrepo_archive/subrepo
1917 ../lf_subrepo_archive/subrepo
1919 ../lf_subrepo_archive/subrepo/large.txt
1918 ../lf_subrepo_archive/subrepo/large.txt
1920 ../lf_subrepo_archive/subrepo/normal.txt
1919 ../lf_subrepo_archive/subrepo/normal.txt
1921
1920
1922 Test update with subrepos.
1921 Test update with subrepos.
1923
1922
1924 $ hg update 0
1923 $ hg update 0
1925 getting changed largefiles
1924 getting changed largefiles
1926 0 largefiles updated, 1 removed
1925 0 largefiles updated, 1 removed
1927 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1926 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1928 $ hg status -S
1927 $ hg status -S
1929 $ hg update tip
1928 $ hg update tip
1930 getting changed largefiles
1929 getting changed largefiles
1931 1 largefiles updated, 0 removed
1930 1 largefiles updated, 0 removed
1932 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1931 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1933 $ hg status -S
1932 $ hg status -S
1934 # modify a large file
1933 # modify a large file
1935 $ echo "modified" > subrepo/large.txt
1934 $ echo "modified" > subrepo/large.txt
1936 $ hg st -S
1935 $ hg st -S
1937 M subrepo/large.txt
1936 M subrepo/large.txt
1938 # update -C should revert the change.
1937 # update -C should revert the change.
1939 $ hg update -C
1938 $ hg update -C
1940 getting changed largefiles
1939 getting changed largefiles
1941 1 largefiles updated, 0 removed
1940 1 largefiles updated, 0 removed
1942 getting changed largefiles
1941 getting changed largefiles
1943 0 largefiles updated, 0 removed
1942 0 largefiles updated, 0 removed
1944 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1943 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1945 $ hg status -S
1944 $ hg status -S
1946
1945
1947 Test archiving a revision that references a subrepo that is not yet
1946 Test archiving a revision that references a subrepo that is not yet
1948 cloned (see test-subrepo-recursion.t):
1947 cloned (see test-subrepo-recursion.t):
1949
1948
1950 $ hg clone -U . ../empty
1949 $ hg clone -U . ../empty
1951 $ cd ../empty
1950 $ cd ../empty
1952 $ hg archive --subrepos -r tip ../archive.tar.gz
1951 $ hg archive --subrepos -r tip ../archive.tar.gz
1953 cloning subrepo subrepo from $TESTTMP/statusmatch/subrepo
1952 cloning subrepo subrepo from $TESTTMP/statusmatch/subrepo
1954 $ cd ..
1953 $ cd ..
1955
1954
1956 Test that addremove picks up largefiles prior to the initial commit (issue3541)
1955 Test that addremove picks up largefiles prior to the initial commit (issue3541)
1957
1956
1958 $ hg init addrm2
1957 $ hg init addrm2
1959 $ cd addrm2
1958 $ cd addrm2
1960 $ touch large.dat
1959 $ touch large.dat
1961 $ touch large2.dat
1960 $ touch large2.dat
1962 $ touch normal
1961 $ touch normal
1963 $ hg add --large large.dat
1962 $ hg add --large large.dat
1964 $ hg addremove -v
1963 $ hg addremove -v
1965 adding large2.dat as a largefile
1964 adding large2.dat as a largefile
1966 adding normal
1965 adding normal
1967
1966
1968 Test that forgetting all largefiles reverts to islfilesrepo() == False
1967 Test that forgetting all largefiles reverts to islfilesrepo() == False
1969 (addremove will add *.dat as normal files now)
1968 (addremove will add *.dat as normal files now)
1970 $ hg forget large.dat
1969 $ hg forget large.dat
1971 $ hg forget large2.dat
1970 $ hg forget large2.dat
1972 $ hg addremove -v
1971 $ hg addremove -v
1973 adding large.dat
1972 adding large.dat
1974 adding large2.dat
1973 adding large2.dat
1975
1974
1976 Test commit's addremove option prior to the first commit
1975 Test commit's addremove option prior to the first commit
1977 $ hg forget large.dat
1976 $ hg forget large.dat
1978 $ hg forget large2.dat
1977 $ hg forget large2.dat
1979 $ hg add --large large.dat
1978 $ hg add --large large.dat
1980 $ hg ci -Am "commit"
1979 $ hg ci -Am "commit"
1981 adding large2.dat as a largefile
1980 adding large2.dat as a largefile
1982 Invoking status precommit hook
1981 Invoking status precommit hook
1983 A large.dat
1982 A large.dat
1984 A large2.dat
1983 A large2.dat
1985 A normal
1984 A normal
1986 $ find .hglf | sort
1985 $ find .hglf | sort
1987 .hglf
1986 .hglf
1988 .hglf/large.dat
1987 .hglf/large.dat
1989 .hglf/large2.dat
1988 .hglf/large2.dat
1990
1989
1991 $ cd ..
1990 $ cd ..
1992
1991
1993 issue3651: summary/outgoing with largefiles shows "no remote repo"
1992 issue3651: summary/outgoing with largefiles shows "no remote repo"
1994 unexpectedly
1993 unexpectedly
1995
1994
1996 $ mkdir issue3651
1995 $ mkdir issue3651
1997 $ cd issue3651
1996 $ cd issue3651
1998
1997
1999 $ hg init src
1998 $ hg init src
2000 $ echo a > src/a
1999 $ echo a > src/a
2001 $ hg -R src add --large src/a
2000 $ hg -R src add --large src/a
2002 $ hg -R src commit -m '#0'
2001 $ hg -R src commit -m '#0'
2003 Invoking status precommit hook
2002 Invoking status precommit hook
2004 A a
2003 A a
2005
2004
2006 check messages when no remote repository is specified:
2005 check messages when no remote repository is specified:
2007 "no remote repo" route for "hg outgoing --large" is not tested here,
2006 "no remote repo" route for "hg outgoing --large" is not tested here,
2008 because it can't be reproduced easily.
2007 because it can't be reproduced easily.
2009
2008
2010 $ hg init clone1
2009 $ hg init clone1
2011 $ hg -R clone1 -q pull src
2010 $ hg -R clone1 -q pull src
2012 $ hg -R clone1 -q update
2011 $ hg -R clone1 -q update
2013 $ hg -R clone1 paths | grep default
2012 $ hg -R clone1 paths | grep default
2014 [1]
2013 [1]
2015
2014
2016 $ hg -R clone1 summary --large
2015 $ hg -R clone1 summary --large
2017 parent: 0:fc0bd45326d3 tip
2016 parent: 0:fc0bd45326d3 tip
2018 #0
2017 #0
2019 branch: default
2018 branch: default
2020 commit: (clean)
2019 commit: (clean)
2021 update: (current)
2020 update: (current)
2022 largefiles: (no remote repo)
2021 largefiles: (no remote repo)
2023
2022
2024 check messages when there is no files to upload:
2023 check messages when there is no files to upload:
2025
2024
2026 $ hg -q clone src clone2
2025 $ hg -q clone src clone2
2027 $ hg -R clone2 paths | grep default
2026 $ hg -R clone2 paths | grep default
2028 default = $TESTTMP/issue3651/src (glob)
2027 default = $TESTTMP/issue3651/src (glob)
2029
2028
2030 $ hg -R clone2 summary --large
2029 $ hg -R clone2 summary --large
2031 parent: 0:fc0bd45326d3 tip
2030 parent: 0:fc0bd45326d3 tip
2032 #0
2031 #0
2033 branch: default
2032 branch: default
2034 commit: (clean)
2033 commit: (clean)
2035 update: (current)
2034 update: (current)
2036 searching for changes
2035 searching for changes
2037 largefiles: (no files to upload)
2036 largefiles: (no files to upload)
2038 $ hg -R clone2 outgoing --large
2037 $ hg -R clone2 outgoing --large
2039 comparing with $TESTTMP/issue3651/src (glob)
2038 comparing with $TESTTMP/issue3651/src (glob)
2040 searching for changes
2039 searching for changes
2041 no changes found
2040 no changes found
2042 searching for changes
2041 searching for changes
2043 largefiles: no files to upload
2042 largefiles: no files to upload
2044 [1]
2043 [1]
2045
2044
2046 check messages when there are files to upload:
2045 check messages when there are files to upload:
2047
2046
2048 $ echo b > clone2/b
2047 $ echo b > clone2/b
2049 $ hg -R clone2 add --large clone2/b
2048 $ hg -R clone2 add --large clone2/b
2050 $ hg -R clone2 commit -m '#1'
2049 $ hg -R clone2 commit -m '#1'
2051 Invoking status precommit hook
2050 Invoking status precommit hook
2052 A b
2051 A b
2053 $ hg -R clone2 summary --large
2052 $ hg -R clone2 summary --large
2054 parent: 1:1acbe71ce432 tip
2053 parent: 1:1acbe71ce432 tip
2055 #1
2054 #1
2056 branch: default
2055 branch: default
2057 commit: (clean)
2056 commit: (clean)
2058 update: (current)
2057 update: (current)
2059 searching for changes
2058 searching for changes
2060 largefiles: 1 to upload
2059 largefiles: 1 to upload
2061 $ hg -R clone2 outgoing --large
2060 $ hg -R clone2 outgoing --large
2062 comparing with $TESTTMP/issue3651/src (glob)
2061 comparing with $TESTTMP/issue3651/src (glob)
2063 searching for changes
2062 searching for changes
2064 changeset: 1:1acbe71ce432
2063 changeset: 1:1acbe71ce432
2065 tag: tip
2064 tag: tip
2066 user: test
2065 user: test
2067 date: Thu Jan 01 00:00:00 1970 +0000
2066 date: Thu Jan 01 00:00:00 1970 +0000
2068 summary: #1
2067 summary: #1
2069
2068
2070 searching for changes
2069 searching for changes
2071 largefiles to upload:
2070 largefiles to upload:
2072 b
2071 b
2073
2072
2074
2073
2075 $ cd ..
2074 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now