git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Nieder <jrnieder@gmail.com>
To: git@vger.kernel.org
Cc: Ramkumar Ramachandra <artagnon@gmail.com>,
	Sverre Rabbelier <srabbelier@gmail.com>,
	David Barr <david.barr@cordelta.com>
Subject: [PATCH 09/15] vcs-svn: Delay read of per-path properties
Date: Fri, 19 Nov 2010 18:52:28 -0600	[thread overview]
Message-ID: <20101120005228.GJ17445@burratino> (raw)
In-Reply-To: <20101120004525.GA17445@burratino>

The mode for each file in an svn-format dump is kept in the properties
section.  The properties section is read as soon as possible to allow
the correct mode to be filled in when registering the file with the
repo_tree lib.

To support nodes with a missing properties section, svn-fe determines
the mode in three stages:

 - The kind (directory or file) of the node is read from the dump and
   used to make an initial estimate (040000 or 100644).
 - Properties are read in and allowed to override this for symlinks
   and executables.
 - If there is no properties section, the mode from the previous
   content of the path is left alone, overriding the above
   considerations.

This is a bit of a mess, and worse, it would get even more complicated
once we start to support property deltas.  If we could only register
the file with a provisional value for mode and then change it later
when properties say so, the procedure would be much simpler.

... oh, right, we can.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 vcs-svn/svndump.c |   42 +++++++++++++++++++-----------------------
 1 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c
index e40be58..4fdfcbb 100644
--- a/vcs-svn/svndump.c
+++ b/vcs-svn/svndump.c
@@ -150,7 +150,8 @@ static void read_props(void)
 
 static void handle_node(void)
 {
-	uint32_t old_mode = 0, mark = 0;
+	uint32_t mark = 0;
+	const uint32_t type = node_ctx.type;
 	const int have_props = node_ctx.propLength != LENGTH_UNKNOWN;
 
 	if (node_ctx.text_delta || node_ctx.prop_delta)
@@ -171,32 +172,27 @@ static void handle_node(void)
 		node_ctx.action = NODEACT_ADD;
 	}
 
-	if (have_props && node_ctx.propLength)
-		read_props();
+	if (node_ctx.srcRev) {
+		repo_copy(node_ctx.srcRev, node_ctx.src, node_ctx.dst);
+		node_ctx.action = NODEACT_CHANGE;
+	}
 
-	if (node_ctx.srcRev)
-		old_mode = repo_copy(node_ctx.srcRev, node_ctx.src, node_ctx.dst);
-
-	if (mark && node_ctx.type == REPO_MODE_DIR)
+	if (mark && type == REPO_MODE_DIR)
 		die("invalid dump: directories cannot have text attached");
 
-	if (node_ctx.action == NODEACT_CHANGE) {
-		if (have_props)
-			repo_modify_path(node_ctx.dst, node_ctx.type, mark);
-		else if (mark)
-			old_mode = repo_modify_path(node_ctx.dst, 0, mark);
-	} else if (node_ctx.action == NODEACT_ADD) {
-		if (node_ctx.srcRev && have_props)
-			repo_modify_path(node_ctx.dst, node_ctx.type, mark);
-		else if (node_ctx.srcRev && mark)
-			old_mode = repo_modify_path(node_ctx.dst, 0, mark);
-		else if ((node_ctx.type == REPO_MODE_DIR && !node_ctx.srcRev) ||
-			 mark)
-			repo_add(node_ctx.dst, node_ctx.type, mark);
-	}
+	if (node_ctx.action == NODEACT_CHANGE)
+		node_ctx.type = repo_modify_path(node_ctx.dst, 0, mark);
+	else	/* Node-action: add */
+		repo_add(node_ctx.dst, type, mark);
 
-	if (!have_props && old_mode)
-		node_ctx.type = old_mode;
+	if (have_props) {
+		const uint32_t old_mode = node_ctx.type;
+		node_ctx.type = type;
+		if (node_ctx.propLength)
+			read_props();
+		if (node_ctx.type != old_mode)
+			repo_modify_path(node_ctx.dst, node_ctx.type, mark);
+	}
 
 	if (mark)
 		fast_export_blob(node_ctx.type, mark, node_ctx.textLength);
-- 
1.7.2.3

  parent reply	other threads:[~2010-11-20  0:53 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-18  5:00 [PATCH 0/2] svn-fe: recognize v3 dumps Jonathan Nieder
2010-11-18  5:02 ` [PATCH 1/2] vcs-svn: Error out for " Jonathan Nieder
2010-11-18  5:03 ` [PATCH 2/2] vcs-svn: Allow simple v3 dumps (no deltas yet) Jonathan Nieder
2010-11-20  0:45 ` [RFC/PATCH 0/15] svn-fe: support for property deltas (but not text " Jonathan Nieder
2010-11-20  0:46   ` [PATCH 01/15] vcs-svn: Check for errors from open() Jonathan Nieder
2010-11-20  0:46   ` [PATCH 02/15] vcs-svn: Eliminate node_ctx.srcRev global Jonathan Nieder
2010-11-20  0:46   ` [PATCH 03/15] vcs-svn: Eliminate node_ctx.mark global Jonathan Nieder
2010-11-20  0:47   ` [PATCH 04/15] vcs-svn: Unclutter handle_node by introducing have_props var Jonathan Nieder
2010-11-20  0:48   ` [PATCH 05/15] vcs-svn: Use mark to indicate nodes with included text Jonathan Nieder
2010-11-20  0:49   ` [PATCH 06/15] vcs-svn: handle_node: Handle deletion case early Jonathan Nieder
2010-11-20  0:49   ` [PATCH 07/15] vcs-svn: Replace = Delete + Add Jonathan Nieder
2010-11-20  0:51   ` [PATCH 08/15] vcs-svn: Combine repo_replace and repo_modify functions Jonathan Nieder
2010-11-20  0:52   ` Jonathan Nieder [this message]
2010-11-20  0:52   ` [PATCH 10/15] vcs-svn: Reject path nodes without Node-action Jonathan Nieder
2010-11-20 14:53     ` Jonathan Nieder
2010-11-20  0:53   ` [PATCH 11/15] vcs-svn: More dump format sanity checks Jonathan Nieder
2010-11-30 19:48     ` Jonathan Nieder
     [not found]       ` <20101205091605.GA4332@burratino>
2010-12-05  9:32         ` [PATCH 2/2] vcs-svn: fix intermittent repo_tree corruption Jonathan Nieder
2010-12-05  9:33       ` [PATCH jn/svn-fe-maint 0/2] " Jonathan Nieder
2010-12-05  9:35         ` [PATCH 1/2] treap: make treap_insert return inserted node Jonathan Nieder
2010-12-06 22:19     ` [PATCH jn/svn-fe] vcs-svn: Allow change nodes for root of tree (/) Jonathan Nieder
2010-12-06 23:12       ` Jonathan Nieder
2010-11-20  0:53   ` [PATCH 12/15] vcs-svn: Make source easier to read on small screens Jonathan Nieder
2010-11-20  0:54   ` [PATCH 13/15] vcs-svn: Split off function for handling of individual properties Jonathan Nieder
2010-11-20  0:54   ` [PATCH 14/15] vcs-svn: Sharpen parsing of property lines Jonathan Nieder
2010-11-20  0:57   ` [PATCH 15/15] vcs-svn: Implement Prop-delta handling Jonathan Nieder
2010-11-20 19:21   ` [WIP/PATCH 0/8] svn-fe: support for text deltas Jonathan Nieder
2010-11-20 19:22     ` [PATCH 1/8] svn-fe: Prepare for strbuf use Jonathan Nieder
2010-11-20 19:25     ` [PATCH 2/8] vcs-svn: Internal fast_export_save_blob helper Jonathan Nieder
2010-11-20 19:25     ` [PATCH 3/8] vcs-svn: Introduce repo_read_path to check the content at a path Jonathan Nieder
2011-03-06 12:29       ` Jonathan Nieder
2010-11-20 19:26     ` [PATCH 4/8] vcs-svn: Introduce fd_buffer routines Jonathan Nieder
2010-11-20 19:27     ` [PATCH 5/8] vcs-svn: Read delta preimage from file descriptor Jonathan Nieder
2010-11-20 19:28     ` [PATCH 6/8] vcs-svn: Let caller set up sliding window for delta preimage Jonathan Nieder
2010-11-20 19:31       ` Jonathan Nieder
2010-11-20 19:29     ` [PATCH 7/8] vcs-svn: Teach line_buffer about temporary files Jonathan Nieder
2010-11-20 19:29     ` [PATCH 8/8] vcs-svn: Implement text-delta handling Jonathan Nieder
2010-12-04 17:34       ` [PATCH 10/8] vcs-svn: Consume whole preimage when applying deltas Jonathan Nieder
2010-11-20 19:30     ` [PATCH 9/8] svn-fe: Test script for handling of dumps with --deltas Jonathan Nieder
2010-12-04 17:29       ` Jonathan Nieder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101120005228.GJ17445@burratino \
    --to=jrnieder@gmail.com \
    --cc=artagnon@gmail.com \
    --cc=david.barr@cordelta.com \
    --cc=git@vger.kernel.org \
    --cc=srabbelier@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).