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

[PATCH 9/9] vcs-svn: allow 64-bit Prop-Content-Length

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Jul 6, 2012, 17:27 UTC
Message-ID
<20120706172750.GJ31001@burratino>
In-Reply-To
<20120706171040.GA31001@burratino>
Date: Thu, 5 Jul 2012 22:47:47 -0500

Currently the vcs-svn/ library only pays attention to the presence of the Prop-Content-Length field and doesn't care about its value, but some day we might care about the value. Parse it as an off_t instead of arbitrarily limiting to 32 bits for intuitiveness.

So now you can import from a dump with more than 2 GiB of properties for a node. In practice that isn't likely to happen often, and this is mostly meant as a cleanup.

Based-on-patch-by: David Barr <davidbarr@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
Another change that was mixed into v2's signedness warnings patch.
In v2 it changed the type of propLength without changing its name.
This version of the patch is more thorough about consistently using
the intuitive type (off_t instead of a 32-bit integer).
That's the end of the series.  Thanks for your patience.
 vcs-svn/svndump.c |   33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c
index c5d07a66..a7f3ea64 100644
--- a/vcs-svn/svndump.c
+++ b/vcs-svn/svndump.c
@@ -34,14 +34,13 @@
 #define NODE_CTX 2	/* node metadata */
 #define INTERNODE_CTX 3	/* between nodes */
 
-#define LENGTH_UNKNOWN (~0)
 #define DATE_RFC2822_LEN 31
 
 static struct line_buffer input = LINE_BUFFER_INIT;
 
 static struct {
-	uint32_t action, propLength, srcRev, type;
-	off_t text_length;
+	uint32_t action, srcRev, type;
+	off_t prop_length, text_length;
 	struct strbuf src, dst;
 	uint32_t text_delta, prop_delta;
 } node_ctx;
@@ -61,7 +60,7 @@ static void reset_node_ctx(char *fname)
 {
 	node_ctx.type = 0;
 	node_ctx.action = NODEACT_UNKNOWN;
-	node_ctx.propLength = LENGTH_UNKNOWN;
+	node_ctx.prop_length = -1;
 	node_ctx.text_length = -1;
 	strbuf_reset(&node_ctx.src);
 	node_ctx.srcRev = 0;
@@ -209,7 +208,7 @@ static void read_props(void)
 static void handle_node(void)
 {
 	const uint32_t type = node_ctx.type;
-	const int have_props = node_ctx.propLength != LENGTH_UNKNOWN;
+	const int have_props = node_ctx.prop_length != -1;
 	const int have_text = node_ctx.text_length != -1;
 	/*
 	 * Old text for this node:
@@ -273,7 +272,7 @@ static void handle_node(void)
 	if (have_props) {
 		if (!node_ctx.prop_delta)
 			node_ctx.type = type;
-		if (node_ctx.propLength)
+		if (node_ctx.prop_length)
 			read_props();
 	}
 
@@ -409,22 +408,26 @@ void svndump_read(const char *url)
 			node_ctx.srcRev = atoi(val);
 			break;
 		case sizeof("Text-content-length"):
-			if (!constcmp(t, "Text-content-length")) {
+			if (constcmp(t, "Text") && constcmp(t, "Prop"))
+				continue;
+			if (constcmp(t + 4, "-content-length"))
+				continue;
+			{
 				char *end;
-				uintmax_t textlen;
+				uintmax_t len;
 
-				textlen = strtoumax(val, &end, 10);
+				len = strtoumax(val, &end, 10);
 				if (!isdigit(*val) || *end)
 					die("invalid dump: non-numeric length %s", val);
-				if (textlen > maximum_signed_value_of_type(off_t))
+				if (len > maximum_signed_value_of_type(off_t))
 					die("unrepresentable length in dump: %s", val);
-				node_ctx.text_length = (off_t) textlen;
+
+				if (*t == 'T')
+					node_ctx.text_length = (off_t) len;
+				else
+					node_ctx.prop_length = (off_t) len;
 				break;
 			}
-			if (constcmp(t, "Prop-content-length"))
-				continue;
-			node_ctx.propLength = atoi(val);
-			break;
 		case sizeof("Text-delta"):
 			if (!constcmp(t, "Text-delta")) {
 				node_ctx.text_delta = !strcmp(val, "true");
-- 
1.7.10.4
Previous: Jonathan NiederNext: David Michael Barr
Message 14 of 16 in “What's cooking in git.git (Jun 2012, #02; Wed, 6)”
  1. Junio C HamanoJun 6, 2012
  2. David Michael BarrJun 6, 2012
  3. Jonathan NiederJun 7, 2012
  4. Junio C HamanoJun 7, 2012
  5. [GIT PULL] vcs-svn housekeepingJonathan Nieder, Jul 6, 2012
  6. 1/9 vcs-svn: drop no-op reset methodsJonathan Nieder, Jul 6, 2012
  7. 2/9 vcs-svn: avoid self-assignment in dummy initialization of pre_offJonathan Nieder, Jul 6, 2012
  8. 3/9 vcs-svn: simplify cleanup in apply_one_windowJonathan Nieder, Jul 6, 2012
  9. 4/9 vcs-svn: use constcmp instead of prefixcmpJonathan Nieder, Jul 6, 2012
  10. 5/9 vcs-svn: use strstr instead of memmemJonathan Nieder, Jul 6, 2012
  11. 6/9 vcs-svn: suppress signed/unsigned comparison warningsJonathan Nieder, Jul 6, 2012
  12. 7/9 vcs-svn: suppress a signed/unsigned comparison warningJonathan Nieder, Jul 6, 2012
  13. 8/9 vcs-svn: suppress a signed/unsigned comparison warningJonathan Nieder, Jul 6, 2012
  14. 9/9 vcs-svn: allow 64-bit Prop-Content-LengthJonathan Nieder, Jul 6, 2012
  15. David Michael BarrJul 6, 2012
  16. Junio C HamanoJul 6, 2012

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.