aboutsummaryrefslogtreecommitdiff
path: root/builtin/rev-parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/rev-parse.c')
-rw-r--r--builtin/rev-parse.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 01a62800e8..218b5f34d6 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -267,21 +267,20 @@ static int show_file(const char *arg, int output_prefix)
static int try_difference(const char *arg)
{
- char *dotdot;
+ const char *dotdot;
struct object_id start_oid;
struct object_id end_oid;
const char *end;
const char *start;
+ char *to_free;
int symmetric;
static const char head_by_default[] = "HEAD";
if (!(dotdot = strstr(arg, "..")))
return 0;
+ start = to_free = xmemdupz(arg, dotdot - arg);
end = dotdot + 2;
- start = arg;
symmetric = (*end == '.');
-
- *dotdot = 0;
end += symmetric;
if (!*end)
@@ -295,7 +294,7 @@ static int try_difference(const char *arg)
* Just ".."? That is not a range but the
* pathspec for the parent directory.
*/
- *dotdot = '.';
+ free(to_free);
return 0;
}
@@ -308,7 +307,7 @@ static int try_difference(const char *arg)
a = lookup_commit_reference(the_repository, &start_oid);
b = lookup_commit_reference(the_repository, &end_oid);
if (!a || !b) {
- *dotdot = '.';
+ free(to_free);
return 0;
}
if (repo_get_merge_bases(the_repository, a, b, &exclude) < 0)
@@ -318,16 +317,16 @@ static int try_difference(const char *arg)
show_rev(REVERSED, &commit->object.oid, NULL);
}
}
- *dotdot = '.';
+ free(to_free);
return 1;
}
- *dotdot = '.';
+ free(to_free);
return 0;
}
static int try_parent_shorthands(const char *arg)
{
- char *dotdot;
+ const char *mark;
struct object_id oid;
struct commit *commit;
struct commit_list *parents;
@@ -335,38 +334,39 @@ static int try_parent_shorthands(const char *arg)
int include_rev = 0;
int include_parents = 0;
int exclude_parent = 0;
+ char *to_free;
- if ((dotdot = strstr(arg, "^!"))) {
+ if ((mark = strstr(arg, "^!"))) {
include_rev = 1;
- if (dotdot[2])
+ if (mark[2])
return 0;
- } else if ((dotdot = strstr(arg, "^@"))) {
+ } else if ((mark = strstr(arg, "^@"))) {
include_parents = 1;
- if (dotdot[2])
+ if (mark[2])
return 0;
- } else if ((dotdot = strstr(arg, "^-"))) {
+ } else if ((mark = strstr(arg, "^-"))) {
include_rev = 1;
exclude_parent = 1;
- if (dotdot[2]) {
+ if (mark[2]) {
char *end;
- exclude_parent = strtoul(dotdot + 2, &end, 10);
+ exclude_parent = strtoul(mark + 2, &end, 10);
if (*end != '\0' || !exclude_parent)
return 0;
}
} else
return 0;
- *dotdot = 0;
+ arg = to_free = xmemdupz(arg, mark - arg);
if (repo_get_oid_committish(the_repository, arg, &oid) ||
!(commit = lookup_commit_reference(the_repository, &oid))) {
- *dotdot = '^';
+ free(to_free);
return 0;
}
if (exclude_parent &&
exclude_parent > commit_list_count(commit->parents)) {
- *dotdot = '^';
+ free(to_free);
return 0;
}
@@ -387,7 +387,7 @@ static int try_parent_shorthands(const char *arg)
free(name);
}
- *dotdot = '^';
+ free(to_free);
return 1;
}