Skip to content

Instantly share code, notes, and snippets.

@seveas
Created December 17, 2012 12:40
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save seveas/4318006 to your computer and use it in GitHub Desktop.
Save seveas/4318006 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
#
# List all files that have ever been committed in this repository, in any
# commit in any branch.
import pygit2
import stat
def list_all_files(repo_path):
repo = pygit2.Repository(repo_path)
walker = repo.walk(repo.head.hex, pygit2.GIT_SORT_NONE)
files = {}
for ref in repo.listall_references():
if not ref.startswith('refs/heads'):
continue
walker.push(repo.lookup_reference(ref).hex)
for ref in walker:
add_tree(repo, ref.tree, '', files)
files = files.keys()
files.sort()
return files
def add_tree(repo, tree, prefix, files):
for file in tree:
fullname = '%s/%s' % (prefix, file.name)
if stat.S_ISDIR(file.filemode):
add_tree(repo, file.to_object(), fullname, files)
else:
files[fullname] = 1
print "\n".join(list_all_files('.'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment