Show More
@@ -359,11 +359,8 b' def reposetup(ui, repo):' | |||||
359 | lfdirstate.write() |
|
359 | lfdirstate.write() | |
360 | return result |
|
360 | return result | |
361 |
|
361 | |||
362 |
|
|
362 | lfiles = lfutil.listlfiles(self) | |
363 | if lfutil.isstandin(f): |
|
363 | match._files = self._subdirlfs(match.files(), lfiles) | |
364 | raise util.Abort( |
|
|||
365 | _('file "%s" is a largefile standin') % f, |
|
|||
366 | hint=('commit the largefile itself instead')) |
|
|||
367 |
|
364 | |||
368 | # Case 2: user calls commit with specified patterns: refresh |
|
365 | # Case 2: user calls commit with specified patterns: refresh | |
369 | # any matching big files. |
|
366 | # any matching big files. | |
@@ -394,7 +391,6 b' def reposetup(ui, repo):' | |||||
394 | # standins corresponding to the big files requested by the |
|
391 | # standins corresponding to the big files requested by the | |
395 | # user. Have to modify _files to prevent commit() from |
|
392 | # user. Have to modify _files to prevent commit() from | |
396 | # complaining "not tracked" for big files. |
|
393 | # complaining "not tracked" for big files. | |
397 | lfiles = lfutil.listlfiles(self) |
|
|||
398 | match = copy.copy(match) |
|
394 | match = copy.copy(match) | |
399 | origmatchfn = match.matchfn |
|
395 | origmatchfn = match.matchfn | |
400 |
|
396 | |||
@@ -467,6 +463,60 b' def reposetup(ui, repo):' | |||||
467 | return super(lfilesrepo, self).push(remote, force, revs, |
|
463 | return super(lfilesrepo, self).push(remote, force, revs, | |
468 | newbranch) |
|
464 | newbranch) | |
469 |
|
465 | |||
|
466 | def _subdirlfs(self, files, lfiles): | |||
|
467 | ''' | |||
|
468 | Adjust matched file list | |||
|
469 | If we pass a directory to commit whose only commitable files | |||
|
470 | are largefiles, the core commit code aborts before finding | |||
|
471 | the largefiles. | |||
|
472 | So we do the following: | |||
|
473 | For directories that only have largefiles as matches, | |||
|
474 | we explicitly add the largefiles to the matchlist and remove | |||
|
475 | the directory. | |||
|
476 | In other cases, we leave the match list unmodified. | |||
|
477 | ''' | |||
|
478 | actualfiles = [] | |||
|
479 | dirs = [] | |||
|
480 | regulars = [] | |||
|
481 | ||||
|
482 | for f in files: | |||
|
483 | if lfutil.isstandin(f + '/'): | |||
|
484 | raise util.Abort( | |||
|
485 | _('file "%s" is a largefile standin') % f, | |||
|
486 | hint=('commit the largefile itself instead')) | |||
|
487 | # Scan directories | |||
|
488 | if os.path.isdir(self.wjoin(f)): | |||
|
489 | dirs.append(f) | |||
|
490 | else: | |||
|
491 | regulars.append(f) | |||
|
492 | ||||
|
493 | for f in dirs: | |||
|
494 | matcheddir = False | |||
|
495 | d = self.dirstate.normalize(f) + '/' | |||
|
496 | # Check for matched normal files | |||
|
497 | for mf in regulars: | |||
|
498 | if self.dirstate.normalize(mf).startswith(d): | |||
|
499 | actualfiles.append(f) | |||
|
500 | matcheddir = True | |||
|
501 | break | |||
|
502 | if not matcheddir: | |||
|
503 | # If no normal match, manually append | |||
|
504 | # any matching largefiles | |||
|
505 | for lf in lfiles: | |||
|
506 | if self.dirstate.normalize(lf).startswith(d): | |||
|
507 | actualfiles.append(lf) | |||
|
508 | if not matcheddir: | |||
|
509 | actualfiles.append(lfutil.standin(f)) | |||
|
510 | matcheddir = True | |||
|
511 | # Nothing in dir, so readd it | |||
|
512 | # and let commit reject it | |||
|
513 | if not matcheddir: | |||
|
514 | actualfiles.append(f) | |||
|
515 | ||||
|
516 | # Always add normal files | |||
|
517 | actualfiles += regulars | |||
|
518 | return actualfiles | |||
|
519 | ||||
470 | repo.__class__ = lfilesrepo |
|
520 | repo.__class__ = lfilesrepo | |
471 |
|
521 | |||
472 | def checkrequireslfiles(ui, repo, **kwargs): |
|
522 | def checkrequireslfiles(ui, repo, **kwargs): |
@@ -345,6 +345,63 b' Corner cases for adding largefiles.' | |||||
345 | A sub2/large6 |
|
345 | A sub2/large6 | |
346 | A sub2/large7 |
|
346 | A sub2/large7 | |
347 |
|
347 | |||
|
348 | Committing directories containing only largefiles. | |||
|
349 | ||||
|
350 | $ mkdir -p z/y/x/m | |||
|
351 | $ touch z/y/x/m/large1 | |||
|
352 | $ touch z/y/x/large2 | |||
|
353 | $ hg add --large z/y/x/m/large1 z/y/x/large2 | |||
|
354 | $ hg commit -m "Subdir with directory only containing largefiles" z | |||
|
355 | Invoking status precommit hook | |||
|
356 | M large3 | |||
|
357 | A large5 | |||
|
358 | A sub2/large6 | |||
|
359 | A sub2/large7 | |||
|
360 | A z/y/x/large2 | |||
|
361 | A z/y/x/m/large1 | |||
|
362 | $ hg rollback --quiet | |||
|
363 | $ touch z/y/x/m/normal | |||
|
364 | $ hg add z/y/x/m/normal | |||
|
365 | $ hg commit -m "Subdir with mixed contents" z | |||
|
366 | Invoking status precommit hook | |||
|
367 | M large3 | |||
|
368 | A large5 | |||
|
369 | A sub2/large6 | |||
|
370 | A sub2/large7 | |||
|
371 | A z/y/x/large2 | |||
|
372 | A z/y/x/m/large1 | |||
|
373 | A z/y/x/m/normal | |||
|
374 | $ hg st | |||
|
375 | M large3 | |||
|
376 | A large5 | |||
|
377 | A sub2/large6 | |||
|
378 | A sub2/large7 | |||
|
379 | $ hg rollback --quiet | |||
|
380 | $ hg revert z/y/x/large2 z/y/x/m/large1 | |||
|
381 | $ rm z/y/x/large2 z/y/x/m/large1 | |||
|
382 | $ hg commit -m "Subdir with normal contents" z | |||
|
383 | Invoking status precommit hook | |||
|
384 | M large3 | |||
|
385 | A large5 | |||
|
386 | A sub2/large6 | |||
|
387 | A sub2/large7 | |||
|
388 | A z/y/x/m/normal | |||
|
389 | $ hg st | |||
|
390 | M large3 | |||
|
391 | A large5 | |||
|
392 | A sub2/large6 | |||
|
393 | A sub2/large7 | |||
|
394 | $ hg rollback --quiet | |||
|
395 | $ hg revert --quiet z | |||
|
396 | $ hg commit -m "Empty subdir" z | |||
|
397 | abort: z: no match under directory! | |||
|
398 | [255] | |||
|
399 | $ rm -rf z | |||
|
400 | $ hg ci -m "standin" .hglf | |||
|
401 | abort: file ".hglf" is a largefile standin | |||
|
402 | (commit the largefile itself instead) | |||
|
403 | [255] | |||
|
404 | ||||
348 | Test "hg status" with combination of 'file pattern' and 'directory |
|
405 | Test "hg status" with combination of 'file pattern' and 'directory | |
349 | pattern' for largefiles: |
|
406 | pattern' for largefiles: | |
350 |
|
407 |
General Comments 0
You need to be logged in to leave comments.
Login now