From: Abhijeet Sonar Date: Mon, 24 Jun 2024 17:37:07 GMT Subject: Re: [PATCH] describe: refresh the index when 'broken' flag is used Message-ID: <4224c251-c6f7-4b2a-b182-b0a12ee300c8@gmail.com> In-Reply-To: > What is the reason why you want to change the owner of a file in > your test? > > If it is merely to make sure you cannot write to the .git/index > file, temporarily doing chmod of the .git directory in a test (with POSIXPERM prerequisite) may be one way to do so, and you do not need the second user in the system test is running. I want to change the owner of a checked-in file and not the `.git` directory. This is because of what you noted in an earlier message: > As many attributes of each file (like the > last modified timestamp and who owns the file) are recorded in the > index for files that were verified to be unmodified (this is done so > that by doing lstat() on a path and comparing the result with the > information saved in the index, we can notice that the path was > modified without actually opening the file and looking at the > contents), after doing something (like "git diff") that causes this > information updated while the files appear to be owned by you Currently, `git describe --dirty --broken` reports the working tree as dirty if you change the owner of a file. And as Phillip pointed out, calling `git update-index --unmerged -q --refresh` to update the index fixes this. What I want to test looks something like this: # initially, the file is owned by a non-root user chown root file git describe --dirty --broken # incorrectly suffixes the output with '-dirty' As mentioned earlier, the dirty suffix goes away if the index is refreshed before running describe. This is what I really want to assert -- that there is no '-dirty' suffix when owner of a file is changed. This kind of simulates the scenario where `git describe` is run in a docker container as was originally reported by Paul: > mkdir test-container > > cd test-container > > cat >Dockerfile < > FROM docker.io/debian:bookworm-slim > > WORKDIR /work > > RUN apt-get update && apt-get -y install git > > EOF > > podman build -t test-image . > > > > mkdir test-repo > > cd test-repo > > git init echo "Hello, world" > README > > git add README > > git commit -m "Initial commit" README > > git tag v1.0.0 > > > > git describe --tags --dirty --broken > > > > podman run -v `pwd`:/work --rm -it --entrypoint '["/usr/bin/git", > >    "describe", "--tags", "--dirty", "--broken"]' test-image Thanks