From mboxrd@z Thu Jan 1 00:00:00 1970 From: Max Kirillov Subject: [PATCH v5 2/3] blame: extract find_single_final Date: Fri, 30 Oct 2015 07:01:52 +0200 Message-ID: <1446181313-15094-3-git-send-email-max@max630.net> References: <1446181313-15094-1-git-send-email-max@max630.net> Cc: Max Kirillov , git@vger.kernel.org To: Junio C Hamano , Jeff King , Eric Sunshine X-From: git-owner@vger.kernel.org Fri Oct 30 06:02:16 2015 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Zs1pK-0004Sv-Dl for gcvg-git-2@plane.gmane.org; Fri, 30 Oct 2015 06:02:10 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752529AbbJ3FCG (ORCPT ); Fri, 30 Oct 2015 01:02:06 -0400 Received: from p3plsmtpa07-01.prod.phx3.secureserver.net ([173.201.192.230]:51724 "EHLO p3plsmtpa07-01.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752346AbbJ3FCF (ORCPT ); Fri, 30 Oct 2015 01:02:05 -0400 Received: from wheezy.local ([82.181.81.240]) by p3plsmtpa07-01.prod.phx3.secureserver.net with id bH1u1r0075B68XE01H23fi; Thu, 29 Oct 2015 22:02:04 -0700 X-Mailer: git-send-email 2.3.4.2801.g3d0809b In-Reply-To: <1446181313-15094-1-git-send-email-max@max630.net> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: Signed-off-by: Max Kirillov --- builtin/blame.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/builtin/blame.c b/builtin/blame.c index 295ce92..38f6267 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -2401,16 +2401,11 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt, return commit; } -static char *prepare_final(struct scoreboard *sb) +static struct object_array_entry *find_single_final(struct rev_info *revs) { 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) @@ -2419,14 +2414,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); - if (sb->final) + if (found) 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) -- 2.3.4.2801.g3d0809b