Merge branch 'tm/line-log-first-parent'
authorJunio C Hamano <gitster@pobox.com>
Thu, 6 Nov 2014 18:52:36 +0000 (10:52 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 6 Nov 2014 18:52:37 +0000 (10:52 -0800)
"git log --first-parent -L..." used to crash.

* tm/line-log-first-parent:
line-log: fix crash when --first-parent is used

1  2 
line-log.c
t/t4211-line-log.sh
diff --cc line-log.c
index 038c58a395c6804e5f719d4d82a3d4edbd6d8901,fe04c9d109e682145e6b761f7f2de27779cf76a2..b7864ad5869eb076e778c352e2f64666dc77a525
@@@ -1139,8 -1162,11 +1139,11 @@@ static int process_ranges_merge_commit(
        struct commit **parents;
        struct commit_list *p;
        int i;
 -      int nparents = count_parents(commit);
 +      int nparents = commit_list_count(commit->parents);
  
+       if (nparents > 1 && rev->first_parent_only)
+               nparents = 1;
        diffqueues = xmalloc(nparents * sizeof(*diffqueues));
        cand = xmalloc(nparents * sizeof(*cand));
        parents = xmalloc(nparents * sizeof(*parents));
index 7369d3c517294feda894eba85f7b02ac9a57ccae,3be25a3a7f0cb39cad496417c5e718bcfd33cfb4..0901b3098239863df983faa61d2b00ce2c4d670d
@@@ -64,34 -64,22 +64,39 @@@ test_bad_opts "-L 1,1000:b.c" "has only
  test_bad_opts "-L :b.c" "argument.*not of the form"
  test_bad_opts "-L :foo:b.c" "no match"
  
 -# There is a separate bug when an empty -L range is the first -L encountered,
 -# thus to demonstrate this particular bug, the empty -L range must follow a
 -# non-empty -L range.
 -test_expect_success '-L {empty-range} (any -L)' '
 +test_expect_success '-L X (X == nlines)' '
 +      n=$(wc -l <b.c) &&
 +      git log -L $n:b.c
 +'
 +
 +test_expect_success '-L X (X == nlines + 1)' '
        n=$(expr $(wc -l <b.c) + 1) &&
 -      git log -L1,1:b.c -L$n:b.c
 +      test_must_fail git log -L $n:b.c
 +'
 +
 +test_expect_success '-L X (X == nlines + 2)' '
 +      n=$(expr $(wc -l <b.c) + 2) &&
 +      test_must_fail git log -L $n:b.c
  '
  
 -test_expect_success '-L {empty-range} (first -L)' '
 +test_expect_success '-L ,Y (Y == nlines)' '
 +      n=$(printf "%d" $(wc -l <b.c)) &&
 +      git log -L ,$n:b.c
 +'
 +
 +test_expect_success '-L ,Y (Y == nlines + 1)' '
        n=$(expr $(wc -l <b.c) + 1) &&
 -      git log -L$n:b.c
 +      test_must_fail git log -L ,$n:b.c
 +'
 +
 +test_expect_success '-L ,Y (Y == nlines + 2)' '
 +      n=$(expr $(wc -l <b.c) + 2) &&
 +      test_must_fail git log -L ,$n:b.c
  '
  
+ test_expect_success '-L with --first-parent and a merge' '
+       git checkout parallel-change &&
+       git log --first-parent -L 1,1:b.c
+ '
  test_done