diff options
author | Tomas Herman <tomas.herman@wikidi.com> | 2013-04-23 11:59:38 +0200 |
---|---|---|
committer | Jed Brown <jed@59A2.org> | 2013-04-25 09:10:32 -0500 |
commit | c23422388b975f13867457c86c78361dfdf8036e (patch) | |
tree | 935a5cb78be17f6409de720867f584acc7d90dd6 | |
parent | ffa7ff707229e961e809ab8f038ee6db80552a7f (diff) | |
download | git-fat-c23422388b975f13867457c86c78361dfdf8036e.tar.gz |
Added support for pulling only a subset of files.
-rwxr-xr-x | git-fat | 27 |
1 files changed, 24 insertions, 3 deletions
@@ -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)) |