summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Eric Sunshine <sunshine@sunshineco.com>2013-07-17 17:25:27 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2013-07-17 18:02:12 -0700
commit3bf65f9e62d25089ca50eb348844d21cdbb53019 (patch)
treedbde6299dcbdc89985f748b12fd8587d4e97ce1b
parentMerge branch 'tr/line-log' (diff)
downloadtgif-3bf65f9e62d25089ca50eb348844d21cdbb53019.tar.xz
line-range: fix "blame -L X,-N" regression
"blame -L X,-N" is documented as blaming "N lines ending at X". In practice, the behavior is achieved by swapping the two range endpoints if the second is less than the first. 25ed3412 (Refactor parse_loc; 2013-03-28) broke this interpretation by removing the swapping code from blame.c and failing to add it to line-range.c along with other code relocated from blame.c. Thus, such a range is effectively treated as empty. Fix this regression. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--line-range.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/line-range.c b/line-range.c
index 8faf943745..3942475c2f 100644
--- a/line-range.c
+++ b/line-range.c
@@ -211,6 +211,8 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb,
void *cb_data, long lines, long *begin, long *end,
const char *path)
{
+ *begin = *end = 0;
+
if (*arg == ':') {
arg = parse_range_funcname(arg, nth_line_cb, cb_data, lines, begin, end, path);
if (!arg || *arg)
@@ -226,6 +228,11 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb,
if (*arg)
return -1;
+ if (*begin && *end && *end < *begin) {
+ long tmp;
+ tmp = *end; *end = *begin; *begin = tmp;
+ }
+
return 0;
}