##// END OF EJS Templates
tersestatus: make methods part of the dirnode class...
Denis Laxalde -
r34684:3d6d4b12 default
parent child Browse files
Show More
@@ -462,59 +462,64 b' class dirnode(object):'
462 if status not in self.statuses:
462 if status not in self.statuses:
463 self.statuses.add(status)
463 self.statuses.add(status)
464
464
465 def _addfilestotersed(path, files, tersedict):
465 def _addfilestotersed(self, tersedict):
466 """ adds files to the their respective status list in the final tersed list
466 """
467
467 adds files to the their respective status list in the final tersed list
468 path is the path of parent directory of the file
468
469 files is a list of tuple where each tuple is (filename, status)
469 path is the path of parent directory of the file
470 tersedict is a dictonary which contains each status abbreviation as key and
470 files is a list of tuple where each tuple is (filename, status)
471 list of files and tersed dirs in that status as value
471 tersedict is a dictonary which contains each status abbreviation as key and
472 """
472 list of files and tersed dirs in that status as value
473 for f, st in files:
473 """
474 tersedict[st].append(os.path.join(path, f))
474 for f, st in self.files:
475
475 tersedict[st].append(os.path.join(self.path, f))
476 def _processtersestatus(subdir, tersedict, terseargs):
476
477 """a recursive function which process status for a certain directory.
477 def _processtersestatus(self, tersedict, terseargs):
478
478 """
479 subdir is an oject of dirnode class defined below. each object of dirnode
479 a recursive function which process status for a certain directory.
480 class has a set of statuses which files in that directory has. This ease our
480
481 check whether we can terse that directory or not.
481 self is an oject of dirnode class defined below. each object of dirnode
482
482 class has a set of statuses which files in that directory has. This ease
483 tersedict is a dictonary which contains each status abbreviation as key and
483 our check whether we can terse that directory or not.
484 list of files and tersed dirs in that status as value. In each function call
484
485 we are passing the same dict and adding files and dirs to it.
485 tersedict is a dictonary which contains each status abbreviation as key
486
486 and list of files and tersed dirs in that status as value. In each
487 terseargs is the string of arguments passed by the user with `--terse` flag.
487 function call we are passing the same dict and adding files and dirs
488
488 to it.
489 Following are the cases which can happen:
489
490
490 terseargs is the string of arguments passed by the user with `--terse`
491 1) All the files in the directory (including all the files in its
491 flag.
492 subdirectories) share the same status and the user has asked us to terse
492
493 that status. -> we add the directory name to status list and return
493 Following are the cases which can happen:
494
494
495 2) If '1)' does not happen, we do following:
495 1) All the files in the directory (including all the files in its
496
496 subdirectories) share the same status and the user has asked us to terse
497 a) Add all the files which are in this directory (only the ones in
497 that status. -> we add the directory name to status list and return
498 this directory, not the subdirs) to their respective status list
498
499
499 2) If '1)' does not happen, we do following:
500 b) Recurse the function on all the subdirectories of this directory
500
501 """
501 a) Add all the files which are in this directory (only the ones in
502
502 this directory, not the subdirs) to their respective status list
503 if len(subdir.statuses) == 1:
503
504 onlyst = subdir.statuses.pop()
504 b) Recurse the function on all the subdirectories of this
505
505 directory
506 # Making sure we terse only when the status abbreviation is passed as
506 """
507 # terse argument
507
508 if onlyst in terseargs:
508 if len(self.statuses) == 1:
509 tersedict[onlyst].append(subdir.path + pycompat.ossep)
509 onlyst = self.statuses.pop()
510 return
510
511
511 # Making sure we terse only when the status abbreviation is
512 # add the files to status list
512 # passed as terse argument
513 _addfilestotersed(subdir.path, subdir.files, tersedict)
513 if onlyst in terseargs:
514
514 tersedict[onlyst].append(self.path + pycompat.ossep)
515 #recurse on the subdirs
515 return
516 for dirobj in subdir.subdirs.values():
516
517 _processtersestatus(dirobj, tersedict, terseargs)
517 # add the files to status list
518 self._addfilestotersed(tersedict)
519
520 #recurse on the subdirs
521 for dirobj in self.subdirs.values():
522 dirobj._processtersestatus(tersedict, terseargs)
518
523
519 def tersedir(statuslist, terseargs):
524 def tersedir(statuslist, terseargs):
520 """
525 """
@@ -553,11 +558,11 b' def tersedir(statuslist, terseargs):'
553 tersedict[attrname[0]] = []
558 tersedict[attrname[0]] = []
554
559
555 # we won't be tersing the root dir, so add files in it
560 # we won't be tersing the root dir, so add files in it
556 _addfilestotersed(rootobj.path, rootobj.files, tersedict)
561 rootobj._addfilestotersed(tersedict)
557
562
558 # process each sub-directory and build tersedict
563 # process each sub-directory and build tersedict
559 for subdir in rootobj.subdirs.values():
564 for subdir in rootobj.subdirs.values():
560 _processtersestatus(subdir, tersedict, terseargs)
565 subdir._processtersestatus(tersedict, terseargs)
561
566
562 tersedlist = []
567 tersedlist = []
563 for st in allst:
568 for st in allst:
General Comments 0
You need to be logged in to leave comments. Login now