Merge branch 'ab/diff-write-incomplete-line' into maint-1.7.11
authorJunio C Hamano <gitster@pobox.com>
Tue, 11 Sep 2012 18:08:30 +0000 (11:08 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 11 Sep 2012 18:08:30 +0000 (11:08 -0700)
* ab/diff-write-incomplete-line:
Fix '\ No newline...' annotation in rewrite diffs

1  2 
diff.c
diff --combined diff.c
index 37bf00270023d6f65084508ee711a21430b10371,4c4dc673f86a1a0be37fd3f05af45bc961e38939..f1b044780ffb0e590f8dd1d609ae2b2c3b54b473
--- 1/diff.c
--- 2/diff.c
+++ b/diff.c
@@@ -574,6 -574,7 +574,7 @@@ static void emit_rewrite_lines(struct e
        if (!endp) {
                const char *plain = diff_get_color(ecb->color_diff,
                                                   DIFF_PLAIN);
+               putc('\n', ecb->opt->file);
                emit_line_0(ecb->opt, plain, reset, '\\',
                            nneof, strlen(nneof));
        }
@@@ -2541,12 -2542,12 +2542,12 @@@ void free_filespec(struct diff_filespe
  }
  
  void fill_filespec(struct diff_filespec *spec, const unsigned char *sha1,
 -                 unsigned short mode)
 +                 int sha1_valid, unsigned short mode)
  {
        if (mode) {
                spec->mode = canon_mode(mode);
                hashcpy(spec->sha1, sha1);
 -              spec->sha1_valid = !is_null_sha1(sha1);
 +              spec->sha1_valid = sha1_valid;
        }
  }
  
@@@ -3187,7 -3188,7 +3188,7 @@@ void diff_setup(struct diff_options *op
        }
  }
  
 -int diff_setup_done(struct diff_options *options)
 +void diff_setup_done(struct diff_options *options)
  {
        int count = 0;
  
                options->output_format = DIFF_FORMAT_NO_OUTPUT;
                DIFF_OPT_SET(options, EXIT_WITH_STATUS);
        }
 -
 -      return 0;
  }
  
  static int opt_arg(const char *arg, int arg_short, const char *arg_long, int *val)
@@@ -4691,7 -4694,6 +4692,7 @@@ static int is_submodule_ignored(const c
  void diff_addremove(struct diff_options *options,
                    int addremove, unsigned mode,
                    const unsigned char *sha1,
 +                  int sha1_valid,
                    const char *concatpath, unsigned dirty_submodule)
  {
        struct diff_filespec *one, *two;
        two = alloc_filespec(concatpath);
  
        if (addremove != '+')
 -              fill_filespec(one, sha1, mode);
 +              fill_filespec(one, sha1, sha1_valid, mode);
        if (addremove != '-') {
 -              fill_filespec(two, sha1, mode);
 +              fill_filespec(two, sha1, sha1_valid, mode);
                two->dirty_submodule = dirty_submodule;
        }
  
@@@ -4738,7 -4740,6 +4739,7 @@@ void diff_change(struct diff_options *o
                 unsigned old_mode, unsigned new_mode,
                 const unsigned char *old_sha1,
                 const unsigned char *new_sha1,
 +               int old_sha1_valid, int new_sha1_valid,
                 const char *concatpath,
                 unsigned old_dirty_submodule, unsigned new_dirty_submodule)
  {
                const unsigned char *tmp_c;
                tmp = old_mode; old_mode = new_mode; new_mode = tmp;
                tmp_c = old_sha1; old_sha1 = new_sha1; new_sha1 = tmp_c;
 +              tmp = old_sha1_valid; old_sha1_valid = new_sha1_valid;
 +                      new_sha1_valid = tmp;
                tmp = old_dirty_submodule; old_dirty_submodule = new_dirty_submodule;
                        new_dirty_submodule = tmp;
        }
  
        one = alloc_filespec(concatpath);
        two = alloc_filespec(concatpath);
 -      fill_filespec(one, old_sha1, old_mode);
 -      fill_filespec(two, new_sha1, new_mode);
 +      fill_filespec(one, old_sha1, old_sha1_valid, old_mode);
 +      fill_filespec(two, new_sha1, new_sha1_valid, new_mode);
        one->dirty_submodule = old_dirty_submodule;
        two->dirty_submodule = new_dirty_submodule;