From c23422388b975f13867457c86c78361dfdf8036e Mon Sep 17 00:00:00 2001 From: Tomas Herman Date: Tue, 23 Apr 2013 11:59:38 +0200 Subject: Added support for pulling only a subset of files. --- git-fat | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'git-fat') diff --git a/git-fat b/git-fat index 139de3b..7bceec1 100755 --- a/git-fat +++ b/git-fat @@ -262,12 +262,14 @@ class GitFat(object): p1.wait() p2.wait() return referenced - def orphan_files(self): + + def orphan_files(self, patterns=[]): 'generator for all orphan placeholders in the working tree' - for fname in subprocess.check_output(['git', 'ls-files']).splitlines(): + for fname in subprocess.check_output(['git', 'ls-files'] + patterns).splitlines(): digest = self.decode_file(fname)[0] if digest: yield (digest, fname) + def cmd_status(self, args): self.setup() catalog = self.catalog_objects() @@ -330,14 +332,33 @@ class GitFat(object): rev = self.revparse(arg) if rev: refargs['rev'] = rev - files = self.referenced_objects(**refargs) - self.catalog_objects() + files = self.filter_objects(refargs, self.parse_pull_patterns(args)) cmd = self.get_rsync_command(push=False) self.verbose('Executing: %s' % ' '.join(cmd)) p = subprocess.Popen(cmd, stdin=subprocess.PIPE) p.communicate(input='\x00'.join(files)) self.checkout() + + def parse_pull_patterns(self, args): + if '--' not in args: + return [''] + else: + idx = args.index('--') + patterns = args[idx+1:] #we don't care about '--' + return patterns + + def filter_objects(self, refargs, patterns): + files = self.referenced_objects(**refargs) - self.catalog_objects() + files_set = set(files) + orphans_matched = list(self.orphan_files(patterns)) + print("pulling:") + print(map(lambda x: x[1], orphans_matched)) + orphans_objects = set(map(lambda x: x[0], orphans_matched)) + return files_set & orphans_objects + def cmd_checkout(self, args): self.checkout(show_orphans=True) + def cmd_gc(self): garbage = self.catalog_objects() - self.referenced_objects() print('Unreferenced objects to remove: %d' % len(garbage)) -- cgit v1.2.1