From: David Kågedal Date: Fri, 17 Aug 2007 15:06:33 +0000 (+0200) Subject: Cleanup tree_status and use -z X-Git-Tag: v0.14~107 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/stgit/commitdiff_plain/14c88aa027b6b2106e8c23964a0433d34d357e9a Cleanup tree_status and use -z Improved the python code, eliminating temporary variables and using destructuring binds. And use NUL-separation instead of newlines. Signed-off-by: David Kågedal Signed-off-by: Karl Hasselström --- diff --git a/stgit/commands/patches.py b/stgit/commands/patches.py index b3defb6..fb65b62 100644 --- a/stgit/commands/patches.py +++ b/stgit/commands/patches.py @@ -51,7 +51,7 @@ def func(parser, options, args): """Show the patches modifying a file """ if not args: - files = [stat[1] for stat in git.tree_status(verbose = True)] + files = [path for (stat,path) in git.tree_status(verbose = True)] else: files = args diff --git a/stgit/commands/refresh.py b/stgit/commands/refresh.py index 218075b..f44c58c 100644 --- a/stgit/commands/refresh.py +++ b/stgit/commands/refresh.py @@ -121,7 +121,7 @@ def func(parser, options, args): else: sign_str = None - files = [x[1] for x in git.tree_status(verbose = True)] + files = [path for (stat,path) in git.tree_status(verbose = True)] if args: files = [f for f in files if f in args] diff --git a/stgit/git.py b/stgit/git.py index 7962cdb..f315b05 100644 --- a/stgit/git.py +++ b/stgit/git.py @@ -168,7 +168,7 @@ def exclude_files(): def tree_status(files = None, tree_id = 'HEAD', unknown = False, noexclude = True, verbose = False, diff_flags = []): - """Returns a list of pairs - [status, filename] + """Returns a list of pairs - (status, filename) """ if verbose: out.start('Checking for changes in the working directory') @@ -181,16 +181,16 @@ def tree_status(files = None, tree_id = 'HEAD', unknown = False, # unknown files if unknown: - if noexclude: - exclude = [] - else: - exclude = (['--exclude=%s' % s for s in - ['*.[ao]', '*.pyc', '.*', '*~', '#*', 'TAGS', 'tags']] - + ['--exclude-per-directory=.gitignore'] - + ['--exclude-from=%s' % fn for fn in exclude_files() - if os.path.exists(fn)]) - lines = GRun('git-ls-files', '--others', '--directory', *exclude - ).output_lines() + cmd = ['git-ls-files', '-z', '--others', '--directory'] + if not noexclude: + cmd += ['--exclude=%s' % s for s in + ['*.[ao]', '*.pyc', '.*', '*~', '#*', 'TAGS', 'tags']] + cmd += ['--exclude-per-directory=.gitignore'] + cmd += ['--exclude-from=%s' % fn + for fn in exclude_files() + if os.path.exists(fn)] + + lines = GRun(*cmd).raw_output().split('\0') cache_files += [('?', line) for line in lines] # conflicted files