241 self.lfstatus = True |
241 self.lfstatus = True |
242 return scmutil.status(*result) |
242 return scmutil.status(*result) |
243 |
243 |
244 # As part of committing, copy all of the largefiles into the |
244 # As part of committing, copy all of the largefiles into the |
245 # cache. |
245 # cache. |
246 def commitctx(self, *args, **kwargs): |
246 def commitctx(self, ctx, *args, **kwargs): |
247 node = super(lfilesrepo, self).commitctx(*args, **kwargs) |
247 node = super(lfilesrepo, self).commitctx(ctx, *args, **kwargs) |
248 lfutil.copyalltostore(self, node) |
248 lfutil.copyalltostore(self, node) |
|
249 class lfilesctx(ctx.__class__): |
|
250 def markcommitted(self, node): |
|
251 orig = super(lfilesctx, self).markcommitted |
|
252 return lfutil.markcommitted(orig, self, node) |
|
253 ctx.__class__ = lfilesctx |
249 return node |
254 return node |
250 |
255 |
251 # Before commit, largefile standins have not had their |
256 # Before commit, largefile standins have not had their |
252 # contents updated to reflect the hash of their largefile. |
257 # contents updated to reflect the hash of their largefile. |
253 # Do that here. |
258 # Do that here. |
268 # |
273 # |
269 if getattr(self, "_isrebasing", False) or \ |
274 if getattr(self, "_isrebasing", False) or \ |
270 getattr(self, "_istransplanting", False): |
275 getattr(self, "_istransplanting", False): |
271 result = orig(text=text, user=user, date=date, match=match, |
276 result = orig(text=text, user=user, date=date, match=match, |
272 force=force, editor=editor, extra=extra) |
277 force=force, editor=editor, extra=extra) |
273 |
|
274 if result: |
|
275 lfdirstate = lfutil.openlfdirstate(ui, self) |
|
276 for f in self[result].files(): |
|
277 if lfutil.isstandin(f): |
|
278 lfile = lfutil.splitstandin(f) |
|
279 lfutil.synclfdirstate(self, lfdirstate, lfile, |
|
280 False) |
|
281 lfdirstate.write() |
|
282 |
|
283 return result |
278 return result |
284 # Case 1: user calls commit with no specific files or |
279 # Case 1: user calls commit with no specific files or |
285 # include/exclude patterns: refresh and commit all files that |
280 # include/exclude patterns: refresh and commit all files that |
286 # are "dirty". |
281 # are "dirty". |
287 if match is None or match.always(): |
282 if match is None or match.always(): |
306 # performed and the working copy is not updated |
301 # performed and the working copy is not updated |
307 # yet. |
302 # yet. |
308 if os.path.exists(self.wjoin(lfile)): |
303 if os.path.exists(self.wjoin(lfile)): |
309 lfutil.updatestandin(self, |
304 lfutil.updatestandin(self, |
310 lfutil.standin(lfile)) |
305 lfutil.standin(lfile)) |
311 lfdirstate.normal(lfile) |
|
312 |
306 |
313 result = orig(text=text, user=user, date=date, match=match, |
307 result = orig(text=text, user=user, date=date, match=match, |
314 force=force, editor=editor, extra=extra) |
308 force=force, editor=editor, extra=extra) |
315 |
309 |
316 if result is not None: |
|
317 for lfile in lfdirstate: |
|
318 if lfile in modifiedfiles: |
|
319 if (not os.path.exists(self.wjoin( |
|
320 lfutil.standin(lfile)))) or \ |
|
321 (not os.path.exists(self.wjoin(lfile))): |
|
322 lfdirstate.drop(lfile) |
|
323 |
|
324 # This needs to be after commit; otherwise precommit hooks |
|
325 # get the wrong status |
|
326 lfdirstate.write() |
|
327 return result |
310 return result |
328 |
311 |
329 lfiles = lfutil.listlfiles(self) |
312 lfiles = lfutil.listlfiles(self) |
330 match._files = self._subdirlfs(match.files(), lfiles) |
313 match._files = self._subdirlfs(match.files(), lfiles) |
331 |
314 |
348 lfdirstate = lfutil.openlfdirstate(ui, self) |
331 lfdirstate = lfutil.openlfdirstate(ui, self) |
349 for standin in standins: |
332 for standin in standins: |
350 lfile = lfutil.splitstandin(standin) |
333 lfile = lfutil.splitstandin(standin) |
351 if lfdirstate[lfile] != 'r': |
334 if lfdirstate[lfile] != 'r': |
352 lfutil.updatestandin(self, standin) |
335 lfutil.updatestandin(self, standin) |
353 lfdirstate.normal(lfile) |
|
354 else: |
|
355 lfdirstate.drop(lfile) |
|
356 |
336 |
357 # Cook up a new matcher that only matches regular files or |
337 # Cook up a new matcher that only matches regular files or |
358 # standins corresponding to the big files requested by the |
338 # standins corresponding to the big files requested by the |
359 # user. Have to modify _files to prevent commit() from |
339 # user. Have to modify _files to prevent commit() from |
360 # complaining "not tracked" for big files. |
340 # complaining "not tracked" for big files. |
384 return f in standins |
364 return f in standins |
385 |
365 |
386 match.matchfn = matchfn |
366 match.matchfn = matchfn |
387 result = orig(text=text, user=user, date=date, match=match, |
367 result = orig(text=text, user=user, date=date, match=match, |
388 force=force, editor=editor, extra=extra) |
368 force=force, editor=editor, extra=extra) |
389 # This needs to be after commit; otherwise precommit hooks |
|
390 # get the wrong status |
|
391 lfdirstate.write() |
|
392 return result |
369 return result |
393 finally: |
370 finally: |
394 wlock.release() |
371 wlock.release() |
395 |
372 |
396 def push(self, remote, force=False, revs=None, newbranch=False): |
373 def push(self, remote, force=False, revs=None, newbranch=False): |