Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
blame: extract find_single_final
author
Max Kirillov
<max@max630.net>
Fri, 30 Oct 2015 05:01:52 +0000
(07:01 +0200)
committer
Junio C Hamano
<gitster@pobox.com>
Fri, 30 Oct 2015 22:30:41 +0000
(15:30 -0700)
Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/blame.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
ec35240
)
diff --git
a/builtin/blame.c
b/builtin/blame.c
index e024f43aeedc2c159943e02882387a03afb335d7..7b075583cf504bc121a9de327f5600ec4b63ac96 100644
(file)
--- a/
builtin/blame.c
+++ b/
builtin/blame.c
@@
-2396,16
+2396,11
@@
static struct commit *fake_working_tree_commit(struct diff_options *opt,
return commit;
}
return commit;
}
-static
char *prepare_final(struct scoreboard *sb
)
+static
struct object_array_entry *find_single_final(struct rev_info *revs
)
{
int i;
{
int i;
- const char *final_commit_name = NULL;
- struct rev_info *revs = sb->revs;
+ struct object_array_entry *found = NULL;
- /*
- * There must be one and only one positive commit in the
- * revs->pending array.
- */
for (i = 0; i < revs->pending.nr; i++) {
struct object *obj = revs->pending.objects[i].item;
if (obj->flags & UNINTERESTING)
for (i = 0; i < revs->pending.nr; i++) {
struct object *obj = revs->pending.objects[i].item;
if (obj->flags & UNINTERESTING)
@@
-2414,14
+2409,24
@@
static char *prepare_final(struct scoreboard *sb)
obj = deref_tag(obj, NULL, 0);
if (obj->type != OBJ_COMMIT)
die("Non commit %s?", revs->pending.objects[i].name);
obj = deref_tag(obj, NULL, 0);
if (obj->type != OBJ_COMMIT)
die("Non commit %s?", revs->pending.objects[i].name);
- if (
sb->final
)
+ if (
found
)
die("More than one commit to dig from %s and %s?",
revs->pending.objects[i].name,
die("More than one commit to dig from %s and %s?",
revs->pending.objects[i].name,
- final_commit_name);
- sb->final = (struct commit *) obj;
- final_commit_name = revs->pending.objects[i].name;
+ found->name);
+ found = &(revs->pending.objects[i]);
+ }
+ return found;
+}
+
+static char *prepare_final(struct scoreboard *sb)
+{
+ struct object_array_entry *found = find_single_final(sb->revs);
+ if (found) {
+ sb->final = (struct commit *) found->item;
+ return xstrdup(found->name);
+ } else {
+ return NULL;
}
}
- return xstrdup_or_null(final_commit_name);
}
static char *prepare_initial(struct scoreboard *sb)
}
static char *prepare_initial(struct scoreboard *sb)