git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Regression introduced in 03267e8656truct object_id oid;

From
Lars Kellogg-Stedman <lars@oddbit.com>
Date
Apr 16, 2023, 17:20 UTC
Message-ID
<bt4342bdip3nzlikjsv6wozszmcbsc2av6cyo3z2lra4jhx3ii@ut2sl5h4f5xn>

[This behavior was originally reported in https://stackoverflow.com/q/76022720/147356.]

Prior to commit 03267e8656, the following sequence would result in an empty commit:

    git init testrepo
    date > testrepo/testfile
    git -C testrepo add testfile
    git -C testrepo commit -m test --allow-empty --only

After commit 03267e8656, the same sequence creates a commit that contains "testfile". I believe the original behavior was correct, based on the documentation for the `--only` option:

> If used together with --allow-empty paths are also not required, and
> an empty commit will be created.

A simple change that corrects this behavior would be to prevent git from refreshing the cache when --only is active:

    diff --git a/builtin/commit.c b/builtin/commit.c
    index 9d8e1ea91a..8c441548f8 100644
    --- a/builtin/commit.c
    +++ b/builtin/commit.c
    @@ -995,7 +995,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
        struct object_id oid;
        const char *parent = "HEAD";
     
    -		if (!the_index.cache_nr) {
    +		if (!the_index.cache_nr && !only) {
          discard_index(&the_index);
          if (repo_read_index(the_repository) < 0)
            die(_("Cannot read index"));

And while that passes all the tests, I'm not sure if its correct; the change in 03267e8656 was correcting a memory leak and I'm not sure I completely understand the details.

-- 
Lars Kellogg-Stedman <lars@oddbit.com> | larsks @ {irc,twitter,github}
http://blog.oddbit.com/                | N1LKS
Next: Lars Kellogg-Stedman
Message 1 of 3 in “Regression introduced in 03267e8656truct object_id oid;”
  1. Lars Kellogg-StedmanApr 16, 2023
  2. Lars Kellogg-StedmanApr 16, 2023
  3. Junio C HamanoApr 17, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.