Merged
Conversation
We'd like to have a machine-readable option for ls-files in order to avoid ambiguity in parsing. Let's add a --json option to provide output in JSON format. Note that we use a JSON object with a single item here in order to allow us to emit more data in the future without breaking backward compatibility.
chrisd8088
approved these changes
May 12, 2022
Gabzygreen11
approved these changes
Nov 24, 2022
chrisd8088
added a commit
to chrisd8088/git-lfs
that referenced
this pull request
Feb 20, 2024
The "git lfs ls-files" command was added in PR git-lfs#122 (technically, the precursor "git media ls-files" command) and its test suite converted to shell tests in PR git-lfs#336; however, the basic functionality of the command has never had tests which confirm it handles files in subdirectories appropriately. (Some tests added in later PRs which do check files in subdirectories under specific conditions, such as with the --exclude option or with non-ASCII characters in subdirectory names.) As we expect to expand this command's test suite in subsequent commits in this PR, we first add a new test which simply confirms that the normal output of the command, and the output with the --debug option, perform as expected when files have been both added and removed within a subdirectory. We also add a test which confirms the same behaviour when the --json option is used. The use of a separate test for this option was preferred in PR git-lfs#5007 when the --json option was first introduced (rather than overloading the existing tests, as was done for the --debug option when it was added in PR git-lfs#2540), so we follow that model here as well.
chrisd8088
added a commit
to chrisd8088/git-lfs
that referenced
this pull request
Feb 20, 2024
In commit 2082b26 of PR git-lfs#681 the "git lfs ls-files" command was enhanced to include in its normal output a simple symbolic indicator of whether a full copy of a Git LFS object existed as a file in the working tree, with a "*" character indicating the presence of such a file, and a "-" indicating the file's absence. While some tests were added at this time, none were added which check the command's output when a file is absent from the working tree. Later, in commit 1565e63 of PR git-lfs#2540, the --debug option was added to the "git lfs ls-files" command, which provides more extensive output, including separate Boolean fields indicating whether a Git LFS object exists as either a file in the working tree or as a cached object file. Again, while some tests were added for this new functionality, they do not check the cases where files are absent from either the working tree or the Git LFS object cache. As we expect to resolve a bug with the display of these data files in a subsequent commit in this PR, we first introduce a new test which validates the existing (and correct) behaviour. (Notably, this test only runs the "git lfs ls-files" command in the root of the working tree; if we executed the command while in a subdirectory, the output would not be correct, and this is the bug we will resolve in another commit in this PR.) We also add a test which confirms the same behaviour when the --json option is used. The use of a separate test for this option was preferred in PR git-lfs#5007 when the --json option was first introduced (rather than overloading the existing tests, as was done for the --debug option when it was added in PR git-lfs#2540), so we follow that model here as well.
chrisd8088
added a commit
to chrisd8088/git-lfs
that referenced
this pull request
Feb 20, 2024
As reported in the following issue comment, the "git lfs ls-files" command does not report the presence or absence of Git LFS object files in the working tree correctly unless the command is run the root directory of the working tree: git-lfs#1189 (comment) We resolve this problem by ensuring that the full, canonicalized path to the working tree is prepended by the fileExistsOfSize() helper function to the paths of the files whose presence it checks with the os.Stat() function. We then add two new tests which validate the correct behaviour of the command when it is run in a subdirectory of the working tree. These tests would fail without the accompanying bug fix to the command. We also add another two new tests which confirm the same behaviour when the --json option is used. The use of a separate test for this option was preferred in PR git-lfs#5007 when the --json option was first introduced (rather than overloading the existing tests, as was done for the --debug option when it was added in PR git-lfs#2540), so we follow that model here as well.
chrisd8088
added a commit
to chrisd8088/git-lfs
that referenced
this pull request
Feb 22, 2024
In commit 2082b26 of PR git-lfs#681 the "git lfs ls-files" command was enhanced to include in its normal output a simple symbolic indicator of whether a full copy of a Git LFS object existed as a file in the working tree, with a "*" character indicating the presence of such a file, and a "-" indicating the file's absence. While some tests were added at this time, none were added which check the command's output when a file is absent from the working tree. Later, in commit 1565e63 of PR git-lfs#2540, the --debug option was added to the "git lfs ls-files" command, which provides more extensive output, including separate Boolean fields indicating whether a Git LFS object exists as either a file in the working tree or as a cached object file. Again, while some tests were added for this new functionality, they do not check the cases where files are absent from either the working tree or the Git LFS object cache. As we expect to resolve a bug with the display of these data files in a subsequent commit in this PR, we first introduce a new test which validates the existing (and correct) behaviour. (Notably, this test only runs the "git lfs ls-files" command in the root of the working tree; if we executed the command while in a subdirectory, the output would not be correct, and this is the bug we will resolve in another commit in this PR.) We also add a test which confirms the same behaviour when the --json option is used. The use of a separate test for this option was preferred in PR git-lfs#5007 when the --json option was first introduced (rather than overloading the existing tests, as was done for the --debug option when it was added in PR git-lfs#2540), so we follow that model here as well.
chrisd8088
added a commit
to chrisd8088/git-lfs
that referenced
this pull request
Feb 22, 2024
As reported in the following issue comment, the "git lfs ls-files" command does not report the presence or absence of Git LFS object files in the working tree correctly unless the command is run the root directory of the working tree: git-lfs#1189 (comment) We resolve this problem by ensuring that the full, canonicalized path to the working tree is prepended by the fileExistsOfSize() helper function to the paths of the files whose presence it checks with the os.Stat() function. We then add two new tests which validate the correct behaviour of the command when it is run in a subdirectory of the working tree. These tests would fail without the accompanying bug fix to the command. We also add another two new tests which confirm the same behaviour when the --json option is used. The use of a separate test for this option was preferred in PR git-lfs#5007 when the --json option was first introduced (rather than overloading the existing tests, as was done for the --debug option when it was added in PR git-lfs#2540), so we follow that model here as well.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
We'd like to have a machine-readable option for ls-files in order to avoid ambiguity in parsing. Let's add a --json option to provide output in JSON format.
Note that we use a JSON object with a single item here in order to allow us to emit more data in the future without breaking backward compatibility.
Fixes #4679