diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-12-28 20:29:22 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-12-28 20:29:22 +0000 |
commit | a16ade2ad496c3716fd551a460c06eef67fc1ca6 (patch) | |
tree | 5336e7a48e642f34eb22b279eeeb584a4030e557 | |
parent | 635dc884018a290316ce75d1f3628fae796a3a2f (diff) | |
download | portage-a16ade2ad496c3716fd551a460c06eef67fc1ca6.tar.gz portage-a16ade2ad496c3716fd551a460c06eef67fc1ca6.tar.bz2 portage-a16ade2ad496c3716fd551a460c06eef67fc1ca6.zip |
Bug #252727 - Use `git diff-index --name-only --diff-filter=M HEAD` instead
of `git ls-files -m --with-tree=HEAD` since the latter doesn't behave
like we want for files that have been added to the index. Also, use `git
diff-index` instead of `git diff` since the latter is considered a high-level
"porcelain" command which means that it's interface may not be reliable.
svn path=/main/trunk/; revision=12359
-rwxr-xr-x | bin/repoman | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/bin/repoman b/bin/repoman index 2755706ca..441c76285 100755 --- a/bin/repoman +++ b/bin/repoman @@ -746,10 +746,15 @@ if vcs == "svn": mychanged = [ "./" + elem.split()[-1:][0] for elem in svnstatus if elem and elem[:1] in "MR" ] mynew = [ "./" + elem.split()[-1:][0] for elem in svnstatus if elem.startswith("A") ] elif vcs == "git": - mychanged = os.popen("git ls-files -m --with-tree=HEAD").readlines() - mychanged = [ "./" + elem[:-1] for elem in mychanged ] - mynew = os.popen("git diff --cached --name-only --diff-filter=A").readlines() strip_levels = repolevel - 1 + + mychanged = os.popen("git diff-index --name-only --diff-filter=M HEAD").readlines() + if strip_levels: + mychanged = [elem[repo_subdir_len:] for elem in mychanged \ + if elem[:repo_subdir_len] == repo_subdir] + mychanged = ["./" + elem[:-1] for elem in mychanged] + + mynew = os.popen("git diff-index --name-only --diff-filter=A HEAD").readlines() if strip_levels: mynew = [elem[repo_subdir_len:] for elem in mynew \ if elem[:repo_subdir_len] == repo_subdir] @@ -1742,15 +1747,21 @@ else: for prop in props if " - " in prop) elif vcs == "git": - mychanged = os.popen("git ls-files -m --with-tree=HEAD").readlines() - mychanged = [ "./" + elem[:-1] for elem in mychanged ] - mynew = os.popen("git diff --cached --name-only --diff-filter=A").readlines() strip_levels = repolevel - 1 + + mychanged = os.popen("git diff-index --name-only --diff-filter=M HEAD").readlines() + if strip_levels: + mychanged = [elem[repo_subdir_len:] for elem in mychanged \ + if elem[:repo_subdir_len] == repo_subdir] + mychanged = ["./" + elem[:-1] for elem in mychanged] + + mynew = os.popen("git diff-index --name-only --diff-filter=A HEAD").readlines() if strip_levels: mynew = [elem[repo_subdir_len:] for elem in mynew \ if elem[:repo_subdir_len] == repo_subdir] mynew = ["./" + elem[:-1] for elem in mynew] - myremoved = os.popen("git diff --cached --name-only --diff-filter=D").readlines() + + myremoved = os.popen("git diff-index --name-only --diff-filter=D HEAD").readlines() if strip_levels: myremoved = [elem[repo_subdir_len:] for elem in myremoved \ if elem[:repo_subdir_len] == repo_subdir] |