# [StGit PATCH 2/2] Don't allow extra diff options with "stg status"

4 messages from 2008-07-08 to 2008-07-09. Participants: Karl Hasselström.
Thread: https://gitlist.dev/t/14352

## Karl Hasselström, 2008-07-08 19:54

Subject: [StGit PATCH 0/2] stg status rename fix (stable)
Message-ID: <20080708195214.24866.61663.stgit@yoghurt>
URL: https://gitlist.dev/e/20080708195214.24866.61663.stgit%40yoghurt
In-Reply-To: <20080708122502.GA8838@diana.vm.bytemark.co.uk>

```
This fixes the bug on the stable branch. (stgit.diff-opts doesn't
exist there, so it's less of an issue, but still.)

Also available at

  git://repo.or.cz/stgit/kha.git safe

---

Karl Hasselström (2):
      Don't allow extra diff options with "stg status"
      Test "stg status" with renames


 stgit/commands/status.py |   16 +++-------------
 stgit/git.py             |    9 ++++++---
 t/t0002-status.sh        |   11 +++++++++++
 3 files changed, 20 insertions(+), 16 deletions(-)

-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle

```

## Karl Hasselström, 2008-07-08 19:54

Subject: [StGit PATCH 1/2] Test "stg status" with renames
Message-ID: <20080708195425.24866.58362.stgit@yoghurt>
URL: https://gitlist.dev/e/20080708195425.24866.58362.stgit%40yoghurt
In-Reply-To: <20080708195214.24866.61663.stgit@yoghurt>

```
Currently, it only works if -M is not passed to git diff-files, so the
second of the two tests fails.

Signed-off-by: Karl Hasselström <kha@treskal.com>

---

 t/t0002-status.sh |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)


diff --git a/t/t0002-status.sh b/t/t0002-status.sh
index 43e1ca0..69c29a0 100755
--- a/t/t0002-status.sh
+++ b/t/t0002-status.sh
@@ -171,4 +171,20 @@ test_expect_success 'Status of disappeared newborn' '
     diff -u expected.txt output.txt
 '
 
+cat > expected.txt <<EOF
+A fay
+D fie
+EOF
+test_expect_success 'Status after renaming a file' '
+    git rm foo/bar &&
+    git mv fie fay &&
+    stg status > output.txt &&
+    diff -u expected.txt output.txt
+'
+
+test_expect_failure 'Status after renaming a file (with rename detection)' '
+    stg status --diff-opts=-M > output.txt &&
+    diff -u expected.txt output.txt
+'
+
 test_done

```

## Karl Hasselström, 2008-07-08 19:54

Subject: [StGit PATCH 2/2] Don't allow extra diff options with "stg status"
Message-ID: <20080708195431.24866.46141.stgit@yoghurt>
URL: https://gitlist.dev/e/20080708195431.24866.46141.stgit%40yoghurt
In-Reply-To: <20080708195214.24866.61663.stgit@yoghurt>

```
The only extra diff options (given either with -O/--diff-opts) that
would affect "stg status" were -C and -M, and those made it crash
because it couldn't handle them. So remove those options.

Signed-off-by: Karl Hasselström <kha@treskal.com>

---

 stgit/commands/status.py |   16 +++-------------
 stgit/git.py             |    9 ++++++---
 t/t0002-status.sh        |    5 -----
 3 files changed, 9 insertions(+), 21 deletions(-)


diff --git a/stgit/commands/status.py b/stgit/commands/status.py
index 20614b0..94d0b57 100644
--- a/stgit/commands/status.py
+++ b/stgit/commands/status.py
@@ -59,22 +59,18 @@ options = [make_option('-m', '--modified',
            make_option('-x', '--noexclude',
                        help = 'do not exclude any files from listing',
                        action = 'store_true'),
-           make_option('-O', '--diff-opts',
-                       help = 'options to pass to git-diff'),
            make_option('--reset',
                        help = 'reset the current tree changes',
                        action = 'store_true')]
 
 
 def status(files = None, modified = False, new = False, deleted = False,
-           conflict = False, unknown = False, noexclude = False,
-           diff_flags = []):
+           conflict = False, unknown = False, noexclude = False):
     """Show the tree status
     """
     cache_files = git.tree_status(files,
                                   unknown = (not files),
-                                  noexclude = noexclude,
-                                  diff_flags = diff_flags)
+                                  noexclude = noexclude)
     filtered = (modified or new or deleted or conflict or unknown)
 
     if filtered:
@@ -116,11 +112,5 @@ def func(parser, options, args):
             resolved_all()
             git.reset()
     else:
-        if options.diff_opts:
-            diff_flags = options.diff_opts.split()
-        else:
-            diff_flags = []
-
         status(args, options.modified, options.new, options.deleted,
-               options.conflict, options.unknown, options.noexclude,
-               diff_flags = diff_flags)
+               options.conflict, options.unknown, options.noexclude)
diff --git a/stgit/git.py b/stgit/git.py
index 8e6bdf4..35579d4 100644
--- a/stgit/git.py
+++ b/stgit/git.py
@@ -192,6 +192,9 @@ def ls_files(files, tree = 'HEAD', full_name = True):
             'Some of the given paths are either missing or not known to GIT'
 
 def parse_git_ls(output):
+    """Parse the output of git diff-index, diff-files, etc. Doesn't handle
+    rename/copy output, so don't feed it output generated with the -M
+    or -C flags."""
     t = None
     for line in output.split('\0'):
         if not line:
@@ -205,7 +208,7 @@ def parse_git_ls(output):
             t = None
 
 def tree_status(files = None, tree_id = 'HEAD', unknown = False,
-                  noexclude = True, verbose = False, diff_flags = []):
+                  noexclude = True, verbose = False):
     """Get the status of all changed files, or of a selected set of
     files. Returns a list of pairs - (status, filename).
 
@@ -252,7 +255,7 @@ def tree_status(files = None, tree_id = 'HEAD', unknown = False,
     # specified when calling the function (i.e. report all files) or
     # files were specified but already found in the previous step
     if not files or files_left:
-        args = diff_flags + [tree_id]
+        args = [tree_id]
         if files_left:
             args += ['--'] + files_left
         for t, fn in parse_git_ls(GRun('diff-index', '-z', *args).raw_output()):
@@ -268,7 +271,7 @@ def tree_status(files = None, tree_id = 'HEAD', unknown = False,
     # function (i.e. report all files) or files were specified but
     # already found in the previous step
     if not files or files_left:
-        args = list(diff_flags)
+        args = []
         if files_left:
             args += ['--'] + files_left
         for t, fn in parse_git_ls(GRun('diff-files', '-z', *args).raw_output()):
diff --git a/t/t0002-status.sh b/t/t0002-status.sh
index 69c29a0..a030739 100755
--- a/t/t0002-status.sh
+++ b/t/t0002-status.sh
@@ -182,9 +182,4 @@ test_expect_success 'Status after renaming a file' '
     diff -u expected.txt output.txt
 '
 
-test_expect_failure 'Status after renaming a file (with rename detection)' '
-    stg status --diff-opts=-M > output.txt &&
-    diff -u expected.txt output.txt
-'
-
 test_done

```

## Karl Hasselström, 2008-07-09 04:05

Subject: Re: [StGit PATCH 0/2] stg status rename fix (stable)
Message-ID: <20080709040501.GA20823@diana.vm.bytemark.co.uk>
URL: https://gitlist.dev/e/20080709040501.GA20823%40diana.vm.bytemark.co.uk
In-Reply-To: <20080708195214.24866.61663.stgit@yoghurt>

```
On 2008-07-08 21:54:19 +0200, Karl Hasselström wrote:

> This fixes the bug on the stable branch. (stgit.diff-opts doesn't
> exist there, so it's less of an issue, but still.)
>
> Also available at
>
>   git://repo.or.cz/stgit/kha.git safe

s/safe/stable/ here, of course.

-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle

```
