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

[PATCH v2 07/10] resolve-undo.c: dump "REUC" extension as json

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Jun 24, 2019, 13:02 UTC
Message-ID
<20190624130226.17293-8-pclouds@gmail.com>
In-Reply-To
<20190624130226.17293-1-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 read-cache.c             |  2 +-
 resolve-undo.c           | 30 +++++++++++++++++-
 resolve-undo.h           |  4 ++-
 t/t3011-ls-files-json.sh | 20 ++++++++++++
 t/t3011/rerere (new)     | 66 ++++++++++++++++++++++++++++++++++++++++
 5 files changed, 119 insertions(+), 3 deletions(-)
diff --git a/read-cache.c b/read-cache.c
index a70df4b0a5..e5183636fc 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1719,7 +1719,7 @@ static int read_index_extension(struct index_state *istate,
 		istate->cache_tree = cache_tree_read(data, sz, istate->jw);
 		break;
 	case CACHE_EXT_RESOLVE_UNDO:
-		istate->resolve_undo = resolve_undo_read(data, sz);
+		istate->resolve_undo = resolve_undo_read(data, sz, istate->jw);
 		break;
 	case CACHE_EXT_LINK:
 		ret = read_link_extension(istate, data, sz);
diff --git a/resolve-undo.c b/resolve-undo.c
index 236320f179..68921e3dfe 100644
--- a/resolve-undo.c
+++ b/resolve-undo.c
@@ -1,5 +1,6 @@
 #include "cache.h"
 #include "dir.h"
+#include "json-writer.h"
 #include "resolve-undo.h"
 #include "string-list.h"
 
@@ -49,7 +50,30 @@ void resolve_undo_write(struct strbuf *sb, struct string_list *resolve_undo)
 	}
 }
 
-struct string_list *resolve_undo_read(const char *data, unsigned long size)
+static void dump_resolve_undo(struct json_writer *jw,
+			      const char *path,
+			      const struct resolve_undo_info *ui)
+{
+	int i;
+
+	if (!jw)
+		return;
+
+	jw_array_inline_begin_object(jw);
+	jw_object_string(jw, "path", path);
+
+	jw_object_inline_begin_array(jw, "stages");
+	for (i = 0; i < 3; i++) {
+		jw_array_inline_begin_object(jw);
+		jw_object_filemode(jw, "mode", ui->mode[i]);
+		jw_object_string(jw, "oid", oid_to_hex(&ui->oid[i]));
+		jw_end(jw);
+	}
+	jw_end(jw);
+}
+
+struct string_list *resolve_undo_read(const char *data, unsigned long size,
+				      struct json_writer *jw)
 {
 	struct string_list *resolve_undo;
 	size_t len;
@@ -59,6 +83,7 @@ struct string_list *resolve_undo_read(const char *data, unsigned long size)
 
 	resolve_undo = xcalloc(1, sizeof(*resolve_undo));
 	resolve_undo->strdup_strings = 1;
+	jw_object_inline_begin_array_gently(jw, "entries");
 
 	while (size) {
 		struct string_list_item *lost;
@@ -94,7 +119,10 @@ struct string_list *resolve_undo_read(const char *data, unsigned long size)
 			size -= rawsz;
 			data += rawsz;
 		}
+
+		dump_resolve_undo(jw, lost->string, ui);
 	}
+	jw_end_gently(jw);
 	return resolve_undo;
 
 error:
diff --git a/resolve-undo.h b/resolve-undo.h
index 2b3f0f901e..46b4e93a7e 100644
--- a/resolve-undo.h
+++ b/resolve-undo.h
@@ -3,6 +3,8 @@
 
 #include "cache.h"
 
+struct json_writer;
+
 struct resolve_undo_info {
 	unsigned int mode[3];
 	struct object_id oid[3];
@@ -10,7 +12,7 @@ struct resolve_undo_info {
 
 void record_resolve_undo(struct index_state *, struct cache_entry *);
 void resolve_undo_write(struct strbuf *, struct string_list *);
-struct string_list *resolve_undo_read(const char *, unsigned long);
+struct string_list *resolve_undo_read(const char *, unsigned long, struct json_writer *);
 void resolve_undo_clear_index(struct index_state *);
 int unmerge_index_entry_at(struct index_state *, int);
 void unmerge_index(struct index_state *, const struct pathspec *);
diff --git a/t/t3011-ls-files-json.sh b/t/t3011-ls-files-json.sh
index 25215f83ae..dc57138f5b 100755
--- a/t/t3011-ls-files-json.sh
+++ b/t/t3011-ls-files-json.sh
@@ -70,4 +70,24 @@ test_expect_success 'ls-files --json, fsmonitor extension ' '
 	)
 '
 
+test_expect_success 'ls-files --json, rerere extension' '
+	git init rerere &&
+	(
+		cd rerere &&
+		mkdir fi &&
+		test_commit initial fi/le first &&
+		git branch side &&
+		test_commit second fi/le second &&
+		git checkout side &&
+		test_commit third fi/le third &&
+		git checkout master &&
+		git config rerere.enabled true &&
+		test_must_fail git merge side &&
+		echo resolved >fi/le &&
+		git add fi/le &&
+		cp ../filter.sed . &&
+		compare_json rerere
+	)
+'
+
 test_done
diff --git a/t/t3011/rerere b/t/t3011/rerere
new file mode 100644
index 0000000000..a8ec4b16ee
--- /dev/null
+++ b/t/t3011/rerere
@@ -0,0 +1,66 @@
+{
+  "version": 2,
+  "oid": <string>,
+  "mtime_sec": <number>,
+  "mtime_nsec": <number>,
+  "entries": [
+    {
+      "id": 0,
+      "name": "fi/le",
+      "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": 9
+      },
+      "file_offset": <number>
+    }
+  ],
+  "extensions": {
+    "TREE": {
+      "file_offset": <number>,
+      "ext_size": <number>,
+      "root": {
+        "oid": null,
+        "subdirs": [
+          {
+            "name": "fi",
+            "oid": null,
+            "subdirs": [
+            ]
+          }
+        ]
+      }
+    },
+    "REUC": {
+      "file_offset": <number>,
+      "ext_size": <number>,
+      "entries": [
+        {
+          "path": "fi/le",
+          "stages": [
+            {
+              "mode": "100644",
+              "oid": <string>
+            },
+            {
+              "mode": "100644",
+              "oid": <string>
+            },
+            {
+              "mode": "100644",
+              "oid": <string>
+            }
+          ]
+        }
+      ]
+    }
+  }
-- 
2.22.0.rc0.322.g2b0371e29a
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 31 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.