From patchwork Mon Apr 24 19:35:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacob Keller X-Patchwork-Id: 13222512 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 062E3C7618E for ; Mon, 24 Apr 2023 19:35:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231959AbjDXTfV (ORCPT ); Mon, 24 Apr 2023 15:35:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229798AbjDXTfU (ORCPT ); Mon, 24 Apr 2023 15:35:20 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5EDAA123 for ; Mon, 24 Apr 2023 12:35:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1682364919; x=1713900919; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=7NahVYaLitN2neFR4yHLVrrZWiTyFBsqiCx4QAndgjc=; b=kWfMnTbYjUejU5mIQhbPslwAc+GacX0RYbcCHAWsoV+N2+g0FVdlHFK0 Clz4Tqd4kLxSQ6uXHsYMkeTp8u8F/KZe8c42Mbuf9gwAV8dvqy+aSjerk Jc1LovEBt3MDj/hBw81AiDCh6oBI+GZmO/HpG7HS32AW1Ozq1hPhKxKks /P7FTZMGxQHK/rHk9rOiZY0GM1WOCVuHO7lvIR9zpSK9O7Jhd/IMg+F3u 5b81po7wySKZTA9Y3u16LFsmDb5IJbwW3MkKszH9k7Ih1M2UQt0AWd9UA BBWCyB7LLLpmeWoJzSb9hSCzV6oorwsRnzZ6LO0pi1RNrfU2xY0Gs/cE/ w==; X-IronPort-AV: E=McAfee;i="6600,9927,10690"; a="348463080" X-IronPort-AV: E=Sophos;i="5.99,223,1677571200"; d="scan'208";a="348463080" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Apr 2023 12:35:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10690"; a="687002173" X-IronPort-AV: E=Sophos;i="5.99,223,1677571200"; d="scan'208";a="687002173" Received: from jekeller-desk.amr.corp.intel.com (HELO jekeller-desk.jekeller.internal) ([10.166.241.1]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Apr 2023 12:35:18 -0700 From: Jacob Keller To: git@vger.kernel.org Cc: Junio C Hamano , Jacob Keller , Glen Choo Subject: [PATCH] blame: use different author name for fake commit generated by --contents Date: Mon, 24 Apr 2023 12:35:08 -0700 Message-ID: <20230424193508.2245566-1-jacob.e.keller@intel.com> X-Mailer: git-send-email 2.40.0.471.gbd7f14d9353b MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Jacob Keller When the --contents option is used with git blame, and the contents of the file have lines which can't be annotated by the history being blamed, the user will see an author of "Not Committed Yet". This is similar to the way blame handles working tree contents when blaming without a revision. This is slightly confusing since this data isn't the working copy and while it is technically "not committed yet", its also coming from an external file. Replace this author name with "External file (--contents)" to better differentiate such lines from actual working copy lines. Suggested-by: Junio C Hamano Suggested-by: Glen Choo Signed-off-by: Jacob Keller --- Changes since v2 * Fix the test case to pass and align with the other similar test cases Documentation/blame-options.txt | 8 +++----- blame.c | 8 ++++++-- t/annotate-tests.sh | 11 +++++++++-- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt index 95599bd6e5f4..552dcc60f2a4 100644 --- a/Documentation/blame-options.txt +++ b/Documentation/blame-options.txt @@ -64,11 +64,9 @@ include::line-range-format.txt[] manual page. --contents :: - Pretend the file being annotated has a commit with the - contents from the named file and a parent of , - defaulting to HEAD when no is specified. You may - specify '-' to make the command read from the standard - input for the file contents. + Annotate using the contents from the named file, starting from + if it is specified, and HEAD otherwise. You may specify '-' to make + the command read from the standard input for the file contents. --date :: Specifies the format used to output dates. If --date is not diff --git a/blame.c b/blame.c index 2c427bcdbfdd..47dd77d045dc 100644 --- a/blame.c +++ b/blame.c @@ -206,8 +206,12 @@ static struct commit *fake_working_tree_commit(struct repository *r, origin = make_origin(commit, path); - ident = fmt_ident("Not Committed Yet", "not.committed.yet", - WANT_BLANK_IDENT, NULL, 0); + if (contents_from) + ident = fmt_ident("External file (--contents)", "external.file", + WANT_BLANK_IDENT, NULL, 0); + else + ident = fmt_ident("Not Committed Yet", "not.committed.yet", + WANT_BLANK_IDENT, NULL, 0); strbuf_addstr(&msg, "tree 0000000000000000000000000000000000000000\n"); for (parent = commit->parents; parent; parent = parent->next) strbuf_addf(&msg, "parent %s\n", diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh index b35be20cf327..2ef70235b101 100644 --- a/t/annotate-tests.sh +++ b/t/annotate-tests.sh @@ -72,6 +72,13 @@ test_expect_success 'blame 1 author' ' check_count A 2 ' +test_expect_success 'blame working copy' ' + test_when_finished "git restore file" && + echo "1A quick brown fox jumps over the" >file && + echo "another lazy dog" >>file && + check_count A 1 "Not Committed Yet" 1 +' + test_expect_success 'blame with --contents' ' check_count --contents=file A 2 ' @@ -79,7 +86,7 @@ test_expect_success 'blame with --contents' ' test_expect_success 'blame with --contents changed' ' echo "1A quick brown fox jumps over the" >contents && echo "another lazy dog" >>contents && - check_count --contents=contents A 1 "Not Committed Yet" 1 + check_count --contents=contents A 1 "External file (--contents)" 1 ' test_expect_success 'blame in a bare repo without starting commit' ' @@ -109,7 +116,7 @@ test_expect_success 'blame 2 authors' ' ' test_expect_success 'blame with --contents and revision' ' - check_count -h testTag --contents=file A 2 "Not Committed Yet" 2 + check_count -h testTag --contents=file A 2 "External file (--contents)" 2 ' test_expect_success 'setup B1 lines (branch1)' '