##// END OF EJS Templates
test-lfs: glob over some output changes...
Matt Harbison -
r37005:b6a4881c default
parent child Browse files
Show More
@@ -1,772 +1,772 b''
1 #require lfs-test-server
1 #require lfs-test-server
2
2
3 $ LFS_LISTEN="tcp://:$HGPORT"
3 $ LFS_LISTEN="tcp://:$HGPORT"
4 $ LFS_HOST="localhost:$HGPORT"
4 $ LFS_HOST="localhost:$HGPORT"
5 $ LFS_PUBLIC=1
5 $ LFS_PUBLIC=1
6 $ export LFS_LISTEN LFS_HOST LFS_PUBLIC
6 $ export LFS_LISTEN LFS_HOST LFS_PUBLIC
7 #if no-windows
7 #if no-windows
8 $ lfs-test-server &> lfs-server.log &
8 $ lfs-test-server &> lfs-server.log &
9 $ echo $! >> $DAEMON_PIDS
9 $ echo $! >> $DAEMON_PIDS
10 #else
10 #else
11 $ cat >> $TESTTMP/spawn.py <<EOF
11 $ cat >> $TESTTMP/spawn.py <<EOF
12 > import os
12 > import os
13 > import subprocess
13 > import subprocess
14 > import sys
14 > import sys
15 >
15 >
16 > for path in os.environ["PATH"].split(os.pathsep):
16 > for path in os.environ["PATH"].split(os.pathsep):
17 > exe = os.path.join(path, 'lfs-test-server.exe')
17 > exe = os.path.join(path, 'lfs-test-server.exe')
18 > if os.path.exists(exe):
18 > if os.path.exists(exe):
19 > with open('lfs-server.log', 'wb') as out:
19 > with open('lfs-server.log', 'wb') as out:
20 > p = subprocess.Popen(exe, stdout=out, stderr=out)
20 > p = subprocess.Popen(exe, stdout=out, stderr=out)
21 > sys.stdout.write('%s\n' % p.pid)
21 > sys.stdout.write('%s\n' % p.pid)
22 > sys.exit(0)
22 > sys.exit(0)
23 > sys.exit(1)
23 > sys.exit(1)
24 > EOF
24 > EOF
25 $ $PYTHON $TESTTMP/spawn.py >> $DAEMON_PIDS
25 $ $PYTHON $TESTTMP/spawn.py >> $DAEMON_PIDS
26 #endif
26 #endif
27
27
28 $ cat >> $HGRCPATH <<EOF
28 $ cat >> $HGRCPATH <<EOF
29 > [extensions]
29 > [extensions]
30 > lfs=
30 > lfs=
31 > [lfs]
31 > [lfs]
32 > url=http://foo:bar@$LFS_HOST/
32 > url=http://foo:bar@$LFS_HOST/
33 > track=all()
33 > track=all()
34 > EOF
34 > EOF
35
35
36 $ hg init repo1
36 $ hg init repo1
37 $ cd repo1
37 $ cd repo1
38 $ echo THIS-IS-LFS > a
38 $ echo THIS-IS-LFS > a
39 $ hg commit -m a -A a
39 $ hg commit -m a -A a
40
40
41 A push can be serviced directly from the usercache if it isn't in the local
41 A push can be serviced directly from the usercache if it isn't in the local
42 store.
42 store.
43
43
44 $ hg init ../repo2
44 $ hg init ../repo2
45 $ mv .hg/store/lfs .hg/store/lfs_
45 $ mv .hg/store/lfs .hg/store/lfs_
46 $ hg push ../repo2 --debug
46 $ hg push ../repo2 --debug
47 http auth: user foo, password ***
47 http auth: user foo, password ***
48 pushing to ../repo2
48 pushing to ../repo2
49 http auth: user foo, password ***
49 http auth: user foo, password ***
50 query 1; heads
50 query 1; heads
51 searching for changes
51 searching for changes
52 1 total queries in *s (glob)
52 1 total queries in *s (glob)
53 listing keys for "phases"
53 listing keys for "phases"
54 checking for updated bookmarks
54 checking for updated bookmarks
55 listing keys for "bookmarks"
55 listing keys for "bookmarks"
56 lfs: computing set of blobs to upload
56 lfs: computing set of blobs to upload
57 Status: 200
57 Status: 200
58 Content-Length: 309
58 Content-Length: 309
59 Content-Type: application/vnd.git-lfs+json
59 Content-Type: application/vnd.git-lfs+json
60 Date: $HTTP_DATE$
60 Date: $HTTP_DATE$
61 {
61 {
62 "objects": [
62 "objects": [
63 {
63 {
64 "actions": {
64 "actions": {
65 "upload": {
65 "upload": {
66 "expires_at": "$ISO_8601_DATE_TIME$",
66 "expires_at": "$ISO_8601_DATE_TIME$",
67 "header": {
67 "header": {
68 "Accept": "application/vnd.git-lfs"
68 "Accept": "application/vnd.git-lfs"
69 },
69 },
70 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
70 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
71 }
71 }
72 },
72 },
73 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
73 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
74 "size": 12
74 "size": 12
75 }
75 }
76 ]
76 ]
77 }
77 }
78 lfs: uploading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
78 lfs: uploading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
79 Status: 200
79 Status: 200
80 Content-Length: 0
80 Content-Length: 0
81 Content-Type: text/plain; charset=utf-8
81 Content-Type: text/plain; charset=utf-8
82 Date: $HTTP_DATE$
82 Date: $HTTP_DATE$
83 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
83 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
84 lfs: uploaded 1 files (12 bytes)
84 lfs: uploaded 1 files (12 bytes)
85 1 changesets found
85 1 changesets found
86 list of changesets:
86 list of changesets:
87 99a7098854a3984a5c9eab0fc7a2906697b7cb5c
87 99a7098854a3984a5c9eab0fc7a2906697b7cb5c
88 bundle2-output-bundle: "HG20", 4 parts total
88 bundle2-output-bundle: "HG20", 4 parts total
89 bundle2-output-part: "replycaps" 191 bytes payload
89 bundle2-output-part: "replycaps" * bytes payload (glob)
90 bundle2-output-part: "check:heads" streamed payload
90 bundle2-output-part: "check:heads" streamed payload
91 bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
91 bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
92 bundle2-output-part: "phase-heads" 24 bytes payload
92 bundle2-output-part: "phase-heads" 24 bytes payload
93 bundle2-input-bundle: with-transaction
93 bundle2-input-bundle: with-transaction
94 bundle2-input-part: "replycaps" supported
94 bundle2-input-part: "replycaps" supported
95 bundle2-input-part: total payload size 191
95 bundle2-input-part: total payload size * (glob)
96 bundle2-input-part: "check:heads" supported
96 bundle2-input-part: "check:heads" supported
97 bundle2-input-part: total payload size 20
97 bundle2-input-part: total payload size 20
98 bundle2-input-part: "changegroup" (params: 1 mandatory) supported
98 bundle2-input-part: "changegroup" (params: 1 mandatory) supported
99 adding changesets
99 adding changesets
100 add changeset 99a7098854a3
100 add changeset 99a7098854a3
101 adding manifests
101 adding manifests
102 adding file changes
102 adding file changes
103 adding a revisions
103 adding a revisions
104 added 1 changesets with 1 changes to 1 files
104 added 1 changesets with 1 changes to 1 files
105 calling hook pretxnchangegroup.lfs: hgext.lfs.checkrequireslfs
105 calling hook pretxnchangegroup.lfs: hgext.lfs.checkrequireslfs
106 bundle2-input-part: total payload size 617
106 bundle2-input-part: total payload size 617
107 bundle2-input-part: "phase-heads" supported
107 bundle2-input-part: "phase-heads" supported
108 bundle2-input-part: total payload size 24
108 bundle2-input-part: total payload size 24
109 bundle2-input-bundle: 3 parts total
109 bundle2-input-bundle: 3 parts total
110 updating the branch cache
110 updating the branch cache
111 bundle2-output-bundle: "HG20", 1 parts total
111 bundle2-output-bundle: "HG20", 1 parts total
112 bundle2-output-part: "reply:changegroup" (advisory) (params: 0 advisory) empty payload
112 bundle2-output-part: "reply:changegroup" (advisory) (params: 0 advisory) empty payload
113 bundle2-input-bundle: no-transaction
113 bundle2-input-bundle: no-transaction
114 bundle2-input-part: "reply:changegroup" (advisory) (params: 0 advisory) supported
114 bundle2-input-part: "reply:changegroup" (advisory) (params: 0 advisory) supported
115 bundle2-input-bundle: 0 parts total
115 bundle2-input-bundle: 0 parts total
116 listing keys for "phases"
116 listing keys for "phases"
117 $ mv .hg/store/lfs_ .hg/store/lfs
117 $ mv .hg/store/lfs_ .hg/store/lfs
118
118
119 Clear the cache to force a download
119 Clear the cache to force a download
120 $ rm -rf `hg config lfs.usercache`
120 $ rm -rf `hg config lfs.usercache`
121 $ cd ../repo2
121 $ cd ../repo2
122 $ hg update tip --debug
122 $ hg update tip --debug
123 http auth: user foo, password ***
123 http auth: user foo, password ***
124 resolving manifests
124 resolving manifests
125 branchmerge: False, force: False, partial: False
125 branchmerge: False, force: False, partial: False
126 ancestor: 000000000000, local: 000000000000+, remote: 99a7098854a3
126 ancestor: 000000000000, local: 000000000000+, remote: 99a7098854a3
127 Status: 200
127 Status: 200
128 Content-Length: 311
128 Content-Length: 311
129 Content-Type: application/vnd.git-lfs+json
129 Content-Type: application/vnd.git-lfs+json
130 Date: $HTTP_DATE$
130 Date: $HTTP_DATE$
131 {
131 {
132 "objects": [
132 "objects": [
133 {
133 {
134 "actions": {
134 "actions": {
135 "download": {
135 "download": {
136 "expires_at": "$ISO_8601_DATE_TIME$",
136 "expires_at": "$ISO_8601_DATE_TIME$",
137 "header": {
137 "header": {
138 "Accept": "application/vnd.git-lfs"
138 "Accept": "application/vnd.git-lfs"
139 },
139 },
140 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
140 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
141 }
141 }
142 },
142 },
143 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
143 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
144 "size": 12
144 "size": 12
145 }
145 }
146 ]
146 ]
147 }
147 }
148 lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
148 lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
149 Status: 200
149 Status: 200
150 Content-Length: 12
150 Content-Length: 12
151 Content-Type: text/plain; charset=utf-8
151 Content-Type: text/plain; charset=utf-8
152 Date: $HTTP_DATE$
152 Date: $HTTP_DATE$
153 lfs: adding 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b to the usercache
153 lfs: adding 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b to the usercache
154 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
154 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
155 a: remote created -> g
155 a: remote created -> g
156 getting a
156 getting a
157 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
157 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
158 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
158 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
159
159
160 When the server has some blobs already
160 When the server has some blobs already
161
161
162 $ hg mv a b
162 $ hg mv a b
163 $ echo ANOTHER-LARGE-FILE > c
163 $ echo ANOTHER-LARGE-FILE > c
164 $ echo ANOTHER-LARGE-FILE2 > d
164 $ echo ANOTHER-LARGE-FILE2 > d
165 $ hg commit -m b-and-c -A b c d
165 $ hg commit -m b-and-c -A b c d
166 $ hg push ../repo1 --debug
166 $ hg push ../repo1 --debug
167 http auth: user foo, password ***
167 http auth: user foo, password ***
168 pushing to ../repo1
168 pushing to ../repo1
169 http auth: user foo, password ***
169 http auth: user foo, password ***
170 query 1; heads
170 query 1; heads
171 searching for changes
171 searching for changes
172 all remote heads known locally
172 all remote heads known locally
173 listing keys for "phases"
173 listing keys for "phases"
174 checking for updated bookmarks
174 checking for updated bookmarks
175 listing keys for "bookmarks"
175 listing keys for "bookmarks"
176 listing keys for "bookmarks"
176 listing keys for "bookmarks"
177 lfs: computing set of blobs to upload
177 lfs: computing set of blobs to upload
178 Status: 200
178 Status: 200
179 Content-Length: 901
179 Content-Length: 901
180 Content-Type: application/vnd.git-lfs+json
180 Content-Type: application/vnd.git-lfs+json
181 Date: $HTTP_DATE$
181 Date: $HTTP_DATE$
182 {
182 {
183 "objects": [
183 "objects": [
184 {
184 {
185 "actions": {
185 "actions": {
186 "download": {
186 "download": {
187 "expires_at": "$ISO_8601_DATE_TIME$",
187 "expires_at": "$ISO_8601_DATE_TIME$",
188 "header": {
188 "header": {
189 "Accept": "application/vnd.git-lfs"
189 "Accept": "application/vnd.git-lfs"
190 },
190 },
191 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
191 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
192 }
192 }
193 },
193 },
194 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
194 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
195 "size": 12
195 "size": 12
196 },
196 },
197 {
197 {
198 "actions": {
198 "actions": {
199 "upload": {
199 "upload": {
200 "expires_at": "$ISO_8601_DATE_TIME$",
200 "expires_at": "$ISO_8601_DATE_TIME$",
201 "header": {
201 "header": {
202 "Accept": "application/vnd.git-lfs"
202 "Accept": "application/vnd.git-lfs"
203 },
203 },
204 "href": "http://localhost:$HGPORT/objects/37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19"
204 "href": "http://localhost:$HGPORT/objects/37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19"
205 }
205 }
206 },
206 },
207 "oid": "37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19",
207 "oid": "37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19",
208 "size": 20
208 "size": 20
209 },
209 },
210 {
210 {
211 "actions": {
211 "actions": {
212 "upload": {
212 "upload": {
213 "expires_at": "$ISO_8601_DATE_TIME$",
213 "expires_at": "$ISO_8601_DATE_TIME$",
214 "header": {
214 "header": {
215 "Accept": "application/vnd.git-lfs"
215 "Accept": "application/vnd.git-lfs"
216 },
216 },
217 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
217 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
218 }
218 }
219 },
219 },
220 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
220 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
221 "size": 19
221 "size": 19
222 }
222 }
223 ]
223 ]
224 }
224 }
225 lfs: need to transfer 2 objects (39 bytes)
225 lfs: need to transfer 2 objects (39 bytes)
226 lfs: uploading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
226 lfs: uploading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
227 Status: 200
227 Status: 200
228 Content-Length: 0
228 Content-Length: 0
229 Content-Type: text/plain; charset=utf-8
229 Content-Type: text/plain; charset=utf-8
230 Date: $HTTP_DATE$
230 Date: $HTTP_DATE$
231 lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
231 lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
232 lfs: uploading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
232 lfs: uploading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
233 Status: 200
233 Status: 200
234 Content-Length: 0
234 Content-Length: 0
235 Content-Type: text/plain; charset=utf-8
235 Content-Type: text/plain; charset=utf-8
236 Date: $HTTP_DATE$
236 Date: $HTTP_DATE$
237 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
237 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
238 lfs: uploaded 2 files (39 bytes)
238 lfs: uploaded 2 files (39 bytes)
239 1 changesets found
239 1 changesets found
240 list of changesets:
240 list of changesets:
241 dfca2c9e2ef24996aa61ba2abd99277d884b3d63
241 dfca2c9e2ef24996aa61ba2abd99277d884b3d63
242 bundle2-output-bundle: "HG20", 5 parts total
242 bundle2-output-bundle: "HG20", 5 parts total
243 bundle2-output-part: "replycaps" 191 bytes payload
243 bundle2-output-part: "replycaps" * bytes payload (glob)
244 bundle2-output-part: "check:phases" 24 bytes payload
244 bundle2-output-part: "check:phases" 24 bytes payload
245 bundle2-output-part: "check:heads" streamed payload
245 bundle2-output-part: "check:heads" streamed payload
246 bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
246 bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
247 bundle2-output-part: "phase-heads" 24 bytes payload
247 bundle2-output-part: "phase-heads" 24 bytes payload
248 bundle2-input-bundle: with-transaction
248 bundle2-input-bundle: with-transaction
249 bundle2-input-part: "replycaps" supported
249 bundle2-input-part: "replycaps" supported
250 bundle2-input-part: total payload size 191
250 bundle2-input-part: total payload size * (glob)
251 bundle2-input-part: "check:phases" supported
251 bundle2-input-part: "check:phases" supported
252 bundle2-input-part: total payload size 24
252 bundle2-input-part: total payload size 24
253 bundle2-input-part: "check:heads" supported
253 bundle2-input-part: "check:heads" supported
254 bundle2-input-part: total payload size 20
254 bundle2-input-part: total payload size 20
255 bundle2-input-part: "changegroup" (params: 1 mandatory) supported
255 bundle2-input-part: "changegroup" (params: 1 mandatory) supported
256 adding changesets
256 adding changesets
257 add changeset dfca2c9e2ef2
257 add changeset dfca2c9e2ef2
258 adding manifests
258 adding manifests
259 adding file changes
259 adding file changes
260 adding b revisions
260 adding b revisions
261 adding c revisions
261 adding c revisions
262 adding d revisions
262 adding d revisions
263 added 1 changesets with 3 changes to 3 files
263 added 1 changesets with 3 changes to 3 files
264 bundle2-input-part: total payload size 1315
264 bundle2-input-part: total payload size 1315
265 bundle2-input-part: "phase-heads" supported
265 bundle2-input-part: "phase-heads" supported
266 bundle2-input-part: total payload size 24
266 bundle2-input-part: total payload size 24
267 bundle2-input-bundle: 4 parts total
267 bundle2-input-bundle: 4 parts total
268 updating the branch cache
268 updating the branch cache
269 bundle2-output-bundle: "HG20", 1 parts total
269 bundle2-output-bundle: "HG20", 1 parts total
270 bundle2-output-part: "reply:changegroup" (advisory) (params: 0 advisory) empty payload
270 bundle2-output-part: "reply:changegroup" (advisory) (params: 0 advisory) empty payload
271 bundle2-input-bundle: no-transaction
271 bundle2-input-bundle: no-transaction
272 bundle2-input-part: "reply:changegroup" (advisory) (params: 0 advisory) supported
272 bundle2-input-part: "reply:changegroup" (advisory) (params: 0 advisory) supported
273 bundle2-input-bundle: 0 parts total
273 bundle2-input-bundle: 0 parts total
274 listing keys for "phases"
274 listing keys for "phases"
275
275
276 Clear the cache to force a download
276 Clear the cache to force a download
277 $ rm -rf `hg config lfs.usercache`
277 $ rm -rf `hg config lfs.usercache`
278 $ hg --repo ../repo1 update tip --debug
278 $ hg --repo ../repo1 update tip --debug
279 http auth: user foo, password ***
279 http auth: user foo, password ***
280 resolving manifests
280 resolving manifests
281 branchmerge: False, force: False, partial: False
281 branchmerge: False, force: False, partial: False
282 ancestor: 99a7098854a3, local: 99a7098854a3+, remote: dfca2c9e2ef2
282 ancestor: 99a7098854a3, local: 99a7098854a3+, remote: dfca2c9e2ef2
283 Status: 200
283 Status: 200
284 Content-Length: 608
284 Content-Length: 608
285 Content-Type: application/vnd.git-lfs+json
285 Content-Type: application/vnd.git-lfs+json
286 Date: $HTTP_DATE$
286 Date: $HTTP_DATE$
287 {
287 {
288 "objects": [
288 "objects": [
289 {
289 {
290 "actions": {
290 "actions": {
291 "download": {
291 "download": {
292 "expires_at": "$ISO_8601_DATE_TIME$",
292 "expires_at": "$ISO_8601_DATE_TIME$",
293 "header": {
293 "header": {
294 "Accept": "application/vnd.git-lfs"
294 "Accept": "application/vnd.git-lfs"
295 },
295 },
296 "href": "http://localhost:$HGPORT/objects/37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19"
296 "href": "http://localhost:$HGPORT/objects/37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19"
297 }
297 }
298 },
298 },
299 "oid": "37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19",
299 "oid": "37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19",
300 "size": 20
300 "size": 20
301 },
301 },
302 {
302 {
303 "actions": {
303 "actions": {
304 "download": {
304 "download": {
305 "expires_at": "$ISO_8601_DATE_TIME$",
305 "expires_at": "$ISO_8601_DATE_TIME$",
306 "header": {
306 "header": {
307 "Accept": "application/vnd.git-lfs"
307 "Accept": "application/vnd.git-lfs"
308 },
308 },
309 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
309 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
310 }
310 }
311 },
311 },
312 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
312 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
313 "size": 19
313 "size": 19
314 }
314 }
315 ]
315 ]
316 }
316 }
317 lfs: need to transfer 2 objects (39 bytes)
317 lfs: need to transfer 2 objects (39 bytes)
318 lfs: downloading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
318 lfs: downloading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
319 Status: 200
319 Status: 200
320 Content-Length: 20
320 Content-Length: 20
321 Content-Type: text/plain; charset=utf-8
321 Content-Type: text/plain; charset=utf-8
322 Date: $HTTP_DATE$
322 Date: $HTTP_DATE$
323 lfs: adding 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 to the usercache
323 lfs: adding 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 to the usercache
324 lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
324 lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
325 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
325 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
326 Status: 200
326 Status: 200
327 Content-Length: 19
327 Content-Length: 19
328 Content-Type: text/plain; charset=utf-8
328 Content-Type: text/plain; charset=utf-8
329 Date: $HTTP_DATE$
329 Date: $HTTP_DATE$
330 lfs: adding d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 to the usercache
330 lfs: adding d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 to the usercache
331 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
331 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
332 b: remote created -> g
332 b: remote created -> g
333 getting b
333 getting b
334 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
334 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
335 c: remote created -> g
335 c: remote created -> g
336 getting c
336 getting c
337 lfs: found d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 in the local lfs store
337 lfs: found d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 in the local lfs store
338 d: remote created -> g
338 d: remote created -> g
339 getting d
339 getting d
340 lfs: found 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 in the local lfs store
340 lfs: found 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 in the local lfs store
341 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
341 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
342
342
343 Test a corrupt file download, but clear the cache first to force a download.
343 Test a corrupt file download, but clear the cache first to force a download.
344
344
345 $ rm -rf `hg config lfs.usercache`
345 $ rm -rf `hg config lfs.usercache`
346 $ cp $TESTTMP/lfs-content/d1/1e/1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 blob
346 $ cp $TESTTMP/lfs-content/d1/1e/1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 blob
347 $ echo 'damage' > $TESTTMP/lfs-content/d1/1e/1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
347 $ echo 'damage' > $TESTTMP/lfs-content/d1/1e/1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
348 $ rm ../repo1/.hg/store/lfs/objects/d1/1e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
348 $ rm ../repo1/.hg/store/lfs/objects/d1/1e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
349 $ rm ../repo1/*
349 $ rm ../repo1/*
350
350
351 $ hg --repo ../repo1 update -C tip --debug
351 $ hg --repo ../repo1 update -C tip --debug
352 http auth: user foo, password ***
352 http auth: user foo, password ***
353 resolving manifests
353 resolving manifests
354 branchmerge: False, force: True, partial: False
354 branchmerge: False, force: True, partial: False
355 ancestor: dfca2c9e2ef2+, local: dfca2c9e2ef2+, remote: dfca2c9e2ef2
355 ancestor: dfca2c9e2ef2+, local: dfca2c9e2ef2+, remote: dfca2c9e2ef2
356 Status: 200
356 Status: 200
357 Content-Length: 311
357 Content-Length: 311
358 Content-Type: application/vnd.git-lfs+json
358 Content-Type: application/vnd.git-lfs+json
359 Date: $HTTP_DATE$
359 Date: $HTTP_DATE$
360 {
360 {
361 "objects": [
361 "objects": [
362 {
362 {
363 "actions": {
363 "actions": {
364 "download": {
364 "download": {
365 "expires_at": "$ISO_8601_DATE_TIME$",
365 "expires_at": "$ISO_8601_DATE_TIME$",
366 "header": {
366 "header": {
367 "Accept": "application/vnd.git-lfs"
367 "Accept": "application/vnd.git-lfs"
368 },
368 },
369 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
369 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
370 }
370 }
371 },
371 },
372 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
372 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
373 "size": 19
373 "size": 19
374 }
374 }
375 ]
375 ]
376 }
376 }
377 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
377 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
378 Status: 200
378 Status: 200
379 Content-Length: 7
379 Content-Length: 7
380 Content-Type: text/plain; charset=utf-8
380 Content-Type: text/plain; charset=utf-8
381 Date: $HTTP_DATE$
381 Date: $HTTP_DATE$
382 abort: corrupt remote lfs object: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
382 abort: corrupt remote lfs object: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
383 [255]
383 [255]
384
384
385 The corrupted blob is not added to the usercache or local store
385 The corrupted blob is not added to the usercache or local store
386
386
387 $ test -f ../repo1/.hg/store/lfs/objects/d1/1e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
387 $ test -f ../repo1/.hg/store/lfs/objects/d1/1e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
388 [1]
388 [1]
389 $ test -f `hg config lfs.usercache`/d1/1e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
389 $ test -f `hg config lfs.usercache`/d1/1e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
390 [1]
390 [1]
391 $ cp blob $TESTTMP/lfs-content/d1/1e/1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
391 $ cp blob $TESTTMP/lfs-content/d1/1e/1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
392
392
393 Test a corrupted file upload
393 Test a corrupted file upload
394
394
395 $ echo 'another lfs blob' > b
395 $ echo 'another lfs blob' > b
396 $ hg ci -m 'another blob'
396 $ hg ci -m 'another blob'
397 $ echo 'damage' > .hg/store/lfs/objects/e6/59058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0
397 $ echo 'damage' > .hg/store/lfs/objects/e6/59058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0
398 $ hg push --debug ../repo1
398 $ hg push --debug ../repo1
399 http auth: user foo, password ***
399 http auth: user foo, password ***
400 pushing to ../repo1
400 pushing to ../repo1
401 http auth: user foo, password ***
401 http auth: user foo, password ***
402 query 1; heads
402 query 1; heads
403 searching for changes
403 searching for changes
404 all remote heads known locally
404 all remote heads known locally
405 listing keys for "phases"
405 listing keys for "phases"
406 checking for updated bookmarks
406 checking for updated bookmarks
407 listing keys for "bookmarks"
407 listing keys for "bookmarks"
408 listing keys for "bookmarks"
408 listing keys for "bookmarks"
409 lfs: computing set of blobs to upload
409 lfs: computing set of blobs to upload
410 Status: 200
410 Status: 200
411 Content-Length: 309
411 Content-Length: 309
412 Content-Type: application/vnd.git-lfs+json
412 Content-Type: application/vnd.git-lfs+json
413 Date: $HTTP_DATE$
413 Date: $HTTP_DATE$
414 {
414 {
415 "objects": [
415 "objects": [
416 {
416 {
417 "actions": {
417 "actions": {
418 "upload": {
418 "upload": {
419 "expires_at": "$ISO_8601_DATE_TIME$",
419 "expires_at": "$ISO_8601_DATE_TIME$",
420 "header": {
420 "header": {
421 "Accept": "application/vnd.git-lfs"
421 "Accept": "application/vnd.git-lfs"
422 },
422 },
423 "href": "http://localhost:$HGPORT/objects/e659058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0"
423 "href": "http://localhost:$HGPORT/objects/e659058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0"
424 }
424 }
425 },
425 },
426 "oid": "e659058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0",
426 "oid": "e659058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0",
427 "size": 17
427 "size": 17
428 }
428 }
429 ]
429 ]
430 }
430 }
431 lfs: uploading e659058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0 (17 bytes)
431 lfs: uploading e659058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0 (17 bytes)
432 abort: detected corrupt lfs object: e659058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0
432 abort: detected corrupt lfs object: e659058e26b07b39d2a9c7145b3f99b41f797b6621c8076600e9cb7ee88291f0
433 (run hg verify)
433 (run hg verify)
434 [255]
434 [255]
435
435
436 Archive will prefetch blobs in a group
436 Archive will prefetch blobs in a group
437
437
438 $ rm -rf .hg/store/lfs `hg config lfs.usercache`
438 $ rm -rf .hg/store/lfs `hg config lfs.usercache`
439 $ hg archive --debug -r 1 ../archive
439 $ hg archive --debug -r 1 ../archive
440 http auth: user foo, password ***
440 http auth: user foo, password ***
441 Status: 200
441 Status: 200
442 Content-Length: 905
442 Content-Length: 905
443 Content-Type: application/vnd.git-lfs+json
443 Content-Type: application/vnd.git-lfs+json
444 Date: $HTTP_DATE$
444 Date: $HTTP_DATE$
445 {
445 {
446 "objects": [
446 "objects": [
447 {
447 {
448 "actions": {
448 "actions": {
449 "download": {
449 "download": {
450 "expires_at": "$ISO_8601_DATE_TIME$",
450 "expires_at": "$ISO_8601_DATE_TIME$",
451 "header": {
451 "header": {
452 "Accept": "application/vnd.git-lfs"
452 "Accept": "application/vnd.git-lfs"
453 },
453 },
454 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
454 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
455 }
455 }
456 },
456 },
457 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
457 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
458 "size": 12
458 "size": 12
459 },
459 },
460 {
460 {
461 "actions": {
461 "actions": {
462 "download": {
462 "download": {
463 "expires_at": "$ISO_8601_DATE_TIME$",
463 "expires_at": "$ISO_8601_DATE_TIME$",
464 "header": {
464 "header": {
465 "Accept": "application/vnd.git-lfs"
465 "Accept": "application/vnd.git-lfs"
466 },
466 },
467 "href": "http://localhost:$HGPORT/objects/37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19"
467 "href": "http://localhost:$HGPORT/objects/37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19"
468 }
468 }
469 },
469 },
470 "oid": "37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19",
470 "oid": "37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19",
471 "size": 20
471 "size": 20
472 },
472 },
473 {
473 {
474 "actions": {
474 "actions": {
475 "download": {
475 "download": {
476 "expires_at": "$ISO_8601_DATE_TIME$",
476 "expires_at": "$ISO_8601_DATE_TIME$",
477 "header": {
477 "header": {
478 "Accept": "application/vnd.git-lfs"
478 "Accept": "application/vnd.git-lfs"
479 },
479 },
480 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
480 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
481 }
481 }
482 },
482 },
483 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
483 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
484 "size": 19
484 "size": 19
485 }
485 }
486 ]
486 ]
487 }
487 }
488 lfs: need to transfer 3 objects (51 bytes)
488 lfs: need to transfer 3 objects (51 bytes)
489 lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
489 lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
490 Status: 200
490 Status: 200
491 Content-Length: 12
491 Content-Length: 12
492 Content-Type: text/plain; charset=utf-8
492 Content-Type: text/plain; charset=utf-8
493 Date: $HTTP_DATE$
493 Date: $HTTP_DATE$
494 lfs: adding 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b to the usercache
494 lfs: adding 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b to the usercache
495 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
495 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
496 lfs: downloading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
496 lfs: downloading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
497 Status: 200
497 Status: 200
498 Content-Length: 20
498 Content-Length: 20
499 Content-Type: text/plain; charset=utf-8
499 Content-Type: text/plain; charset=utf-8
500 Date: $HTTP_DATE$
500 Date: $HTTP_DATE$
501 lfs: adding 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 to the usercache
501 lfs: adding 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 to the usercache
502 lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
502 lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
503 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
503 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
504 Status: 200
504 Status: 200
505 Content-Length: 19
505 Content-Length: 19
506 Content-Type: text/plain; charset=utf-8
506 Content-Type: text/plain; charset=utf-8
507 Date: $HTTP_DATE$
507 Date: $HTTP_DATE$
508 lfs: adding d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 to the usercache
508 lfs: adding d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 to the usercache
509 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
509 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
510 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
510 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
511 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
511 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
512 lfs: found d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 in the local lfs store
512 lfs: found d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 in the local lfs store
513 lfs: found 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 in the local lfs store
513 lfs: found 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 in the local lfs store
514 $ find ../archive | sort
514 $ find ../archive | sort
515 ../archive
515 ../archive
516 ../archive/.hg_archival.txt
516 ../archive/.hg_archival.txt
517 ../archive/a
517 ../archive/a
518 ../archive/b
518 ../archive/b
519 ../archive/c
519 ../archive/c
520 ../archive/d
520 ../archive/d
521
521
522 Cat will prefetch blobs in a group
522 Cat will prefetch blobs in a group
523
523
524 $ rm -rf .hg/store/lfs `hg config lfs.usercache`
524 $ rm -rf .hg/store/lfs `hg config lfs.usercache`
525 $ hg cat --debug -r 1 a b c
525 $ hg cat --debug -r 1 a b c
526 http auth: user foo, password ***
526 http auth: user foo, password ***
527 Status: 200
527 Status: 200
528 Content-Length: 608
528 Content-Length: 608
529 Content-Type: application/vnd.git-lfs+json
529 Content-Type: application/vnd.git-lfs+json
530 Date: $HTTP_DATE$
530 Date: $HTTP_DATE$
531 {
531 {
532 "objects": [
532 "objects": [
533 {
533 {
534 "actions": {
534 "actions": {
535 "download": {
535 "download": {
536 "expires_at": "$ISO_8601_DATE_TIME$",
536 "expires_at": "$ISO_8601_DATE_TIME$",
537 "header": {
537 "header": {
538 "Accept": "application/vnd.git-lfs"
538 "Accept": "application/vnd.git-lfs"
539 },
539 },
540 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
540 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
541 }
541 }
542 },
542 },
543 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
543 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
544 "size": 12
544 "size": 12
545 },
545 },
546 {
546 {
547 "actions": {
547 "actions": {
548 "download": {
548 "download": {
549 "expires_at": "$ISO_8601_DATE_TIME$",
549 "expires_at": "$ISO_8601_DATE_TIME$",
550 "header": {
550 "header": {
551 "Accept": "application/vnd.git-lfs"
551 "Accept": "application/vnd.git-lfs"
552 },
552 },
553 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
553 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
554 }
554 }
555 },
555 },
556 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
556 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
557 "size": 19
557 "size": 19
558 }
558 }
559 ]
559 ]
560 }
560 }
561 lfs: need to transfer 2 objects (31 bytes)
561 lfs: need to transfer 2 objects (31 bytes)
562 lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
562 lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
563 Status: 200
563 Status: 200
564 Content-Length: 12
564 Content-Length: 12
565 Content-Type: text/plain; charset=utf-8
565 Content-Type: text/plain; charset=utf-8
566 Date: $HTTP_DATE$
566 Date: $HTTP_DATE$
567 lfs: adding 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b to the usercache
567 lfs: adding 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b to the usercache
568 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
568 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
569 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
569 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
570 Status: 200
570 Status: 200
571 Content-Length: 19
571 Content-Length: 19
572 Content-Type: text/plain; charset=utf-8
572 Content-Type: text/plain; charset=utf-8
573 Date: $HTTP_DATE$
573 Date: $HTTP_DATE$
574 lfs: adding d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 to the usercache
574 lfs: adding d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 to the usercache
575 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
575 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
576 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
576 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
577 THIS-IS-LFS
577 THIS-IS-LFS
578 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
578 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
579 THIS-IS-LFS
579 THIS-IS-LFS
580 lfs: found d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 in the local lfs store
580 lfs: found d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 in the local lfs store
581 ANOTHER-LARGE-FILE
581 ANOTHER-LARGE-FILE
582
582
583 Revert will prefetch blobs in a group
583 Revert will prefetch blobs in a group
584
584
585 $ rm -rf .hg/store/lfs
585 $ rm -rf .hg/store/lfs
586 $ rm -rf `hg config lfs.usercache`
586 $ rm -rf `hg config lfs.usercache`
587 $ rm *
587 $ rm *
588 $ hg revert --all -r 1 --debug
588 $ hg revert --all -r 1 --debug
589 http auth: user foo, password ***
589 http auth: user foo, password ***
590 adding a
590 adding a
591 reverting b
591 reverting b
592 reverting c
592 reverting c
593 reverting d
593 reverting d
594 Status: 200
594 Status: 200
595 Content-Length: 905
595 Content-Length: 905
596 Content-Type: application/vnd.git-lfs+json
596 Content-Type: application/vnd.git-lfs+json
597 Date: $HTTP_DATE$
597 Date: $HTTP_DATE$
598 {
598 {
599 "objects": [
599 "objects": [
600 {
600 {
601 "actions": {
601 "actions": {
602 "download": {
602 "download": {
603 "expires_at": "$ISO_8601_DATE_TIME$",
603 "expires_at": "$ISO_8601_DATE_TIME$",
604 "header": {
604 "header": {
605 "Accept": "application/vnd.git-lfs"
605 "Accept": "application/vnd.git-lfs"
606 },
606 },
607 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
607 "href": "http://localhost:$HGPORT/objects/31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b"
608 }
608 }
609 },
609 },
610 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
610 "oid": "31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b",
611 "size": 12
611 "size": 12
612 },
612 },
613 {
613 {
614 "actions": {
614 "actions": {
615 "download": {
615 "download": {
616 "expires_at": "$ISO_8601_DATE_TIME$",
616 "expires_at": "$ISO_8601_DATE_TIME$",
617 "header": {
617 "header": {
618 "Accept": "application/vnd.git-lfs"
618 "Accept": "application/vnd.git-lfs"
619 },
619 },
620 "href": "http://localhost:$HGPORT/objects/37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19"
620 "href": "http://localhost:$HGPORT/objects/37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19"
621 }
621 }
622 },
622 },
623 "oid": "37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19",
623 "oid": "37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19",
624 "size": 20
624 "size": 20
625 },
625 },
626 {
626 {
627 "actions": {
627 "actions": {
628 "download": {
628 "download": {
629 "expires_at": "$ISO_8601_DATE_TIME$",
629 "expires_at": "$ISO_8601_DATE_TIME$",
630 "header": {
630 "header": {
631 "Accept": "application/vnd.git-lfs"
631 "Accept": "application/vnd.git-lfs"
632 },
632 },
633 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
633 "href": "http://localhost:$HGPORT/objects/d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998"
634 }
634 }
635 },
635 },
636 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
636 "oid": "d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998",
637 "size": 19
637 "size": 19
638 }
638 }
639 ]
639 ]
640 }
640 }
641 lfs: need to transfer 3 objects (51 bytes)
641 lfs: need to transfer 3 objects (51 bytes)
642 lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
642 lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
643 Status: 200
643 Status: 200
644 Content-Length: 12
644 Content-Length: 12
645 Content-Type: text/plain; charset=utf-8
645 Content-Type: text/plain; charset=utf-8
646 Date: $HTTP_DATE$
646 Date: $HTTP_DATE$
647 lfs: adding 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b to the usercache
647 lfs: adding 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b to the usercache
648 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
648 lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
649 lfs: downloading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
649 lfs: downloading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
650 Status: 200
650 Status: 200
651 Content-Length: 20
651 Content-Length: 20
652 Content-Type: text/plain; charset=utf-8
652 Content-Type: text/plain; charset=utf-8
653 Date: $HTTP_DATE$
653 Date: $HTTP_DATE$
654 lfs: adding 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 to the usercache
654 lfs: adding 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 to the usercache
655 lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
655 lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
656 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
656 lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
657 Status: 200
657 Status: 200
658 Content-Length: 19
658 Content-Length: 19
659 Content-Type: text/plain; charset=utf-8
659 Content-Type: text/plain; charset=utf-8
660 Date: $HTTP_DATE$
660 Date: $HTTP_DATE$
661 lfs: adding d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 to the usercache
661 lfs: adding d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 to the usercache
662 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
662 lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
663 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
663 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
664 lfs: found d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 in the local lfs store
664 lfs: found d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 in the local lfs store
665 lfs: found 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 in the local lfs store
665 lfs: found 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 in the local lfs store
666 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
666 lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store
667
667
668 Check error message when the remote missed a blob:
668 Check error message when the remote missed a blob:
669
669
670 $ echo FFFFF > b
670 $ echo FFFFF > b
671 $ hg commit -m b -A b
671 $ hg commit -m b -A b
672 $ echo FFFFF >> b
672 $ echo FFFFF >> b
673 $ hg commit -m b b
673 $ hg commit -m b b
674 $ rm -rf .hg/store/lfs
674 $ rm -rf .hg/store/lfs
675 $ rm -rf `hg config lfs.usercache`
675 $ rm -rf `hg config lfs.usercache`
676 $ hg update -C '.^' --debug
676 $ hg update -C '.^' --debug
677 http auth: user foo, password ***
677 http auth: user foo, password ***
678 resolving manifests
678 resolving manifests
679 branchmerge: False, force: True, partial: False
679 branchmerge: False, force: True, partial: False
680 ancestor: 62fdbaf221c6+, local: 62fdbaf221c6+, remote: ef0564edf47e
680 ancestor: 62fdbaf221c6+, local: 62fdbaf221c6+, remote: ef0564edf47e
681 Status: 200
681 Status: 200
682 Content-Length: 308
682 Content-Length: 308
683 Content-Type: application/vnd.git-lfs+json
683 Content-Type: application/vnd.git-lfs+json
684 Date: $HTTP_DATE$
684 Date: $HTTP_DATE$
685 {
685 {
686 "objects": [
686 "objects": [
687 {
687 {
688 "actions": {
688 "actions": {
689 "upload": {
689 "upload": {
690 "expires_at": "$ISO_8601_DATE_TIME$",
690 "expires_at": "$ISO_8601_DATE_TIME$",
691 "header": {
691 "header": {
692 "Accept": "application/vnd.git-lfs"
692 "Accept": "application/vnd.git-lfs"
693 },
693 },
694 "href": "http://localhost:$HGPORT/objects/8e6ea5f6c066b44a0efa43bcce86aea73f17e6e23f0663df0251e7524e140a13"
694 "href": "http://localhost:$HGPORT/objects/8e6ea5f6c066b44a0efa43bcce86aea73f17e6e23f0663df0251e7524e140a13"
695 }
695 }
696 },
696 },
697 "oid": "8e6ea5f6c066b44a0efa43bcce86aea73f17e6e23f0663df0251e7524e140a13",
697 "oid": "8e6ea5f6c066b44a0efa43bcce86aea73f17e6e23f0663df0251e7524e140a13",
698 "size": 6
698 "size": 6
699 }
699 }
700 ]
700 ]
701 }
701 }
702 abort: LFS server error. Remote object for "b" not found:(.*)! (re)
702 abort: LFS server error. Remote object for "b" not found:(.*)! (re)
703 [255]
703 [255]
704
704
705 Check error message when object does not exist:
705 Check error message when object does not exist:
706
706
707 $ cd $TESTTMP
707 $ cd $TESTTMP
708 $ hg init test && cd test
708 $ hg init test && cd test
709 $ echo "[extensions]" >> .hg/hgrc
709 $ echo "[extensions]" >> .hg/hgrc
710 $ echo "lfs=" >> .hg/hgrc
710 $ echo "lfs=" >> .hg/hgrc
711 $ echo "[lfs]" >> .hg/hgrc
711 $ echo "[lfs]" >> .hg/hgrc
712 $ echo "threshold=1" >> .hg/hgrc
712 $ echo "threshold=1" >> .hg/hgrc
713 $ echo a > a
713 $ echo a > a
714 $ hg add a
714 $ hg add a
715 $ hg commit -m 'test'
715 $ hg commit -m 'test'
716 $ echo aaaaa > a
716 $ echo aaaaa > a
717 $ hg commit -m 'largefile'
717 $ hg commit -m 'largefile'
718 $ hg debugdata .hg/store/data/a.i 1 # verify this is no the file content but includes "oid", the LFS "pointer".
718 $ hg debugdata .hg/store/data/a.i 1 # verify this is no the file content but includes "oid", the LFS "pointer".
719 version https://git-lfs.github.com/spec/v1
719 version https://git-lfs.github.com/spec/v1
720 oid sha256:bdc26931acfb734b142a8d675f205becf27560dc461f501822de13274fe6fc8a
720 oid sha256:bdc26931acfb734b142a8d675f205becf27560dc461f501822de13274fe6fc8a
721 size 6
721 size 6
722 x-is-binary 0
722 x-is-binary 0
723 $ cd ..
723 $ cd ..
724 $ rm -rf `hg config lfs.usercache`
724 $ rm -rf `hg config lfs.usercache`
725
725
726 (Restart the server in a different location so it no longer has the content)
726 (Restart the server in a different location so it no longer has the content)
727
727
728 $ $PYTHON $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
728 $ $PYTHON $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
729 $ rm $DAEMON_PIDS
729 $ rm $DAEMON_PIDS
730 $ mkdir $TESTTMP/lfs-server2
730 $ mkdir $TESTTMP/lfs-server2
731 $ cd $TESTTMP/lfs-server2
731 $ cd $TESTTMP/lfs-server2
732 #if no-windows
732 #if no-windows
733 $ lfs-test-server &> lfs-server.log &
733 $ lfs-test-server &> lfs-server.log &
734 $ echo $! >> $DAEMON_PIDS
734 $ echo $! >> $DAEMON_PIDS
735 #else
735 #else
736 $ $PYTHON $TESTTMP/spawn.py >> $DAEMON_PIDS
736 $ $PYTHON $TESTTMP/spawn.py >> $DAEMON_PIDS
737 #endif
737 #endif
738
738
739 $ cd $TESTTMP
739 $ cd $TESTTMP
740 $ hg --debug clone test test2
740 $ hg --debug clone test test2
741 http auth: user foo, password ***
741 http auth: user foo, password ***
742 linked 6 files
742 linked 6 files
743 http auth: user foo, password ***
743 http auth: user foo, password ***
744 updating to branch default
744 updating to branch default
745 resolving manifests
745 resolving manifests
746 branchmerge: False, force: False, partial: False
746 branchmerge: False, force: False, partial: False
747 ancestor: 000000000000, local: 000000000000+, remote: d2a338f184a8
747 ancestor: 000000000000, local: 000000000000+, remote: d2a338f184a8
748 Status: 200
748 Status: 200
749 Content-Length: 308
749 Content-Length: 308
750 Content-Type: application/vnd.git-lfs+json
750 Content-Type: application/vnd.git-lfs+json
751 Date: $HTTP_DATE$
751 Date: $HTTP_DATE$
752 {
752 {
753 "objects": [
753 "objects": [
754 {
754 {
755 "actions": {
755 "actions": {
756 "upload": {
756 "upload": {
757 "expires_at": "$ISO_8601_DATE_TIME$",
757 "expires_at": "$ISO_8601_DATE_TIME$",
758 "header": {
758 "header": {
759 "Accept": "application/vnd.git-lfs"
759 "Accept": "application/vnd.git-lfs"
760 },
760 },
761 "href": "http://localhost:$HGPORT/objects/bdc26931acfb734b142a8d675f205becf27560dc461f501822de13274fe6fc8a"
761 "href": "http://localhost:$HGPORT/objects/bdc26931acfb734b142a8d675f205becf27560dc461f501822de13274fe6fc8a"
762 }
762 }
763 },
763 },
764 "oid": "bdc26931acfb734b142a8d675f205becf27560dc461f501822de13274fe6fc8a",
764 "oid": "bdc26931acfb734b142a8d675f205becf27560dc461f501822de13274fe6fc8a",
765 "size": 6
765 "size": 6
766 }
766 }
767 ]
767 ]
768 }
768 }
769 abort: LFS server error. Remote object for "a" not found:(.*)! (re)
769 abort: LFS server error. Remote object for "a" not found:(.*)! (re)
770 [255]
770 [255]
771
771
772 $ $PYTHON $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
772 $ $PYTHON $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
General Comments 0
You need to be logged in to leave comments. Login now