diff options
Diffstat (limited to 'flit/vcs/hg.py')
-rw-r--r-- | flit/vcs/hg.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/flit/vcs/hg.py b/flit/vcs/hg.py new file mode 100644 index 0000000..2c97eeb --- /dev/null +++ b/flit/vcs/hg.py @@ -0,0 +1,34 @@ +import os +from subprocess import check_output + +name = 'hg' + +def find_repo_root(directory): + for p in [directory] + list(directory.parents): + if (p / '.hg').is_dir(): + return p + +def _repo_paths_to_directory_paths(paths, directory): + # 'hg status' gives paths from repo root, which may not be our directory. + directory = directory.resolve() + repo = find_repo_root(directory) + if directory != repo: + directory_in_repo = str(directory.relative_to(repo)) + os.sep + ix = len(directory_in_repo) + paths = [p[ix:] for p in paths + if os.path.normpath(p).startswith(directory_in_repo)] + return paths + + +def list_tracked_files(directory): + outb = check_output(['hg', 'status', '--clean', '--added', '--modified', '--no-status'], + cwd=str(directory)) + paths = [os.fsdecode(l) for l in outb.strip().splitlines()] + return _repo_paths_to_directory_paths(paths, directory) + + +def list_untracked_deleted_files(directory): + outb = check_output(['hg', 'status', '--unknown', '--deleted', '--no-status'], + cwd=str(directory)) + paths = [os.fsdecode(l) for l in outb.strip().splitlines()] + return _repo_paths_to_directory_paths(paths, directory) |