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

Re: [PATCH v2 01/10] ls-files: add --json to dump the index

From
Thomas Gummerer <t.gummerer@gmail.com>
Date
Jun 25, 2019, 09:05 UTC
Message-ID
<20190625090554.GA2423@hank.intra.tgummerer.com>
In-Reply-To
<20190624130226.17293-2-pclouds@gmail.com>
On 06/24, Nguyễn Thái Ngọc Duy wrote:
Show 85 quoted lines
> So far we don't have a command to basically dump the index file out,
> with all its glory details. Checking some info, for example, stat
> time, usually involves either writing new code or firing up "xxd" and
> decoding values by yourself.
> 
> This --json is supposed to help that. It dumps the index in a human
> readable format but also easy to be processed with tools. And it will
> print almost enough info to reconstruct the index later.
> 
> In this patch we only dump the main part, not extensions. But at the
> end of the series, the entire index is dumped. The end result could be
> very verbose even on a small repository such as git.git.
> 
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
>  Documentation/git-ls-files.txt    |  5 +++
>  builtin/ls-files.c                | 38 +++++++++++++---
>  cache.h                           |  2 +
>  json-writer.c                     | 22 ++++++++++
>  json-writer.h                     | 23 ++++++++++
>  read-cache.c                      | 72 ++++++++++++++++++++++++++++++-
>  t/t3011-ls-files-json.sh (new +x) | 44 +++++++++++++++++++
>  t/t3011/basic (new)               | 67 ++++++++++++++++++++++++++++
>  8 files changed, 265 insertions(+), 8 deletions(-)
>
> [...]
>
> diff --git a/t/t3011-ls-files-json.sh b/t/t3011-ls-files-json.sh
> new file mode 100755
> index 0000000000..97bcd814be
> --- /dev/null
> +++ b/t/t3011-ls-files-json.sh
> @@ -0,0 +1,44 @@
> +#!/bin/sh
> +
> +test_description='ls-files dumping json'
> +
> +. ./test-lib.sh
> +
> +strip_number() {
> +	for name; do
> +		echo 's/\("'$name'":\) [0-9]\+/\1 <number>/' >>filter.sed
> +	done
> +}
> +
> +strip_string() {
> +	for name; do
> +		echo 's/\("'$name'":\) ".*"/\1 <string>/' >>filter.sed
> +	done
> +}
> +
> +compare_json() {
> +	git ls-files --debug-json >json &&
> +	sed -f filter.sed json >filtered &&
> +	test_cmp "$TEST_DIRECTORY"/t3011/"$1" filtered
> +}
> +
> +test_expect_success 'setup' '
> +	mkdir sub &&
> +	echo one >one &&
> +	git add one &&
> +	echo 2 >sub/two &&
> +	git add sub/two &&
> +
> +	echo intent-to-add >ita &&
> +	git add -N ita &&
> +
> +	strip_number ctime_sec ctime_nsec mtime_sec mtime_nsec &&
> +	strip_number device inode uid gid file_offset ext_size &&
> +	strip_string oid ident
> +'
> +
> +test_expect_success 'ls-files --json, main entries' '
> +	compare_json basic
> +'
> +
> +test_done
> diff --git a/t/t3011/basic b/t/t3011/basic
> new file mode 100644
> index 0000000000..9436445d90
> --- /dev/null
> +++ b/t/t3011/basic
> @@ -0,0 +1,67 @@
> +{
> +  "version": 3,

This will break the test suite when 'GIT_TEST_INDEX_VERSION' is set to 4 for example. I think this applies to a few other tests in later patches as well.

Show 68 quoted lines
> +  "oid": <string>,
> +  "mtime_sec": <number>,
> +  "mtime_nsec": <number>,
> +  "entries": [
> +    {
> +      "id": 0,
> +      "name": "ita",
> +      "mode": "100644",
> +      "flags": 536887296,
> +      "extended_flags": true,
> +      "intent_to_add": true,
> +      "oid": <string>,
> +      "stat": {
> +        "ctime_sec": <number>,
> +        "ctime_nsec": <number>,
> +        "mtime_sec": <number>,
> +        "mtime_nsec": <number>,
> +        "device": <number>,
> +        "inode": <number>,
> +        "uid": <number>,
> +        "gid": <number>,
> +        "size": 0
> +      },
> +      "file_offset": <number>
> +    },
> +    {
> +      "id": 1,
> +      "name": "one",
> +      "mode": "100644",
> +      "flags": 0,
> +      "oid": <string>,
> +      "stat": {
> +        "ctime_sec": <number>,
> +        "ctime_nsec": <number>,
> +        "mtime_sec": <number>,
> +        "mtime_nsec": <number>,
> +        "device": <number>,
> +        "inode": <number>,
> +        "uid": <number>,
> +        "gid": <number>,
> +        "size": 4
> +      },
> +      "file_offset": <number>
> +    },
> +    {
> +      "id": 2,
> +      "name": "sub/two",
> +      "mode": "100644",
> +      "flags": 0,
> +      "oid": <string>,
> +      "stat": {
> +        "ctime_sec": <number>,
> +        "ctime_nsec": <number>,
> +        "mtime_sec": <number>,
> +        "mtime_nsec": <number>,
> +        "device": <number>,
> +        "inode": <number>,
> +        "uid": <number>,
> +        "gid": <number>,
> +        "size": 2
> +      },
> +      "file_offset": <number>
> +    }
> +  ]
> +}
> -- 
> 2.22.0.rc0.322.g2b0371e29a
> 
Previous: Jeff HostetlerNext: Johannes Schindelin
Message 8 of 43 in “Add 'ls-files --debug-json' to dump the index in json”
  1. 00/10 Add 'ls-files --debug-json' to dump the index in jsonNguyễn Thái Ngọc Duy, Jun 24, 2019
  2. 01/10 ls-files: add --json to dump the indexNguyễn Thái Ngọc Duy, Jun 24, 2019
  3. Jeff HostetlerJun 24, 2019
  4. Junio C HamanoJun 24, 2019
  5. Johannes SchindelinJun 25, 2019
  6. Duy NguyenJun 25, 2019
  7. Jeff HostetlerJun 25, 2019
  8. Thomas GummererJun 25, 2019
  9. Johannes SchindelinJun 25, 2019
  10. Johannes SchindelinJun 25, 2019
  11. Johannes SchindelinJun 25, 2019
  12. Junio C HamanoJun 25, 2019
  13. Junio C HamanoJun 26, 2019
  14. 02/10 read-cache.c: dump common extension info in jsonNguyễn Thái Ngọc Duy, Jun 24, 2019
  15. 03/10 cache-tree.c: dump "TREE" extension as jsonNguyễn Thái Ngọc Duy, Jun 24, 2019
  16. 04/10 dir.c: dump "UNTR" extension as jsonNguyễn Thái Ngọc Duy, Jun 24, 2019
  17. Jeff HostetlerJun 24, 2019
  18. 05/10 split-index.c: dump "link" extension as jsonNguyễn Thái Ngọc Duy, Jun 24, 2019
  19. Jeff HostetlerJun 24, 2019
  20. Duy NguyenJun 25, 2019
  21. Derrick StoleeJun 25, 2019
  22. Duy NguyenJun 27, 2019
  23. Jeff HostetlerJun 27, 2019
  24. Derrick StoleeJun 27, 2019
  25. Duy NguyenJun 27, 2019
  26. SZEDER GáborJul 3, 2019
  27. SZEDER GáborJul 4, 2019
  28. Duy NguyenJul 4, 2019
  29. Junio C HamanoJul 8, 2019
  30. 06/10 fsmonitor.c: dump "FSMN" extension as jsonNguyễn Thái Ngọc Duy, Jun 24, 2019
  31. 07/10 resolve-undo.c: dump "REUC" extension as jsonNguyễn Thái Ngọc Duy, Jun 24, 2019
  32. 09/10 read-cache.c: dump "IEOT" extension as jsonNguyễn Thái Ngọc Duy, Jun 24, 2019
  33. 08/10 read-cache.c: dump "EOIE" extension as jsonNguyễn Thái Ngọc Duy, Jun 24, 2019
  34. 10/10 t3008: use the new SINGLE_CPU prereqNguyễn Thái Ngọc Duy, Jun 24, 2019
  35. Johannes SchindelinJun 24, 2019
  36. Jeff HostetlerJun 24, 2019
  37. Duy NguyenJun 25, 2019
  38. Thomas GummererJun 25, 2019
  39. Johannes SchindelinJun 25, 2019
  40. Duy NguyenJun 25, 2019
  41. Johannes SchindelinJun 25, 2019
  42. Ramsay JonesJun 25, 2019
  43. Johannes SchindelinJun 26, 2019

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.