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>
Eric Sunshine committed
Jul 17, 2013 at 17:25 UTC
3bf65f9e62d25089ca50eb348844d21cdbb53019
1 file changed
+7
line-range.c
+7
@@ -211,6 +211,8 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb,
211
void *cb_data, long lines, long *begin, long *end,
212
const char *path)
213
{
214
+ *begin = *end = 0;
215
+
216
if (*arg == ':') {
217
arg = parse_range_funcname(arg, nth_line_cb, cb_data, lines, begin, end, path);
218
if (!arg || *arg)
@@ -226,6 +228,11 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb,
228
if (*arg)
229
return -1;
230
231
+ if (*begin && *end && *end < *begin) {
232
+ long tmp;
233
+ tmp = *end; *end = *begin; *begin = tmp;
234
+ }
235
+
236
return 0;
237
}
238