summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: dd3f42a)
raw | patch | inline | side by side (parent: dd3f42a)
author | David Barr <david.barr@cordelta.com> | |
Mon, 13 Dec 2010 06:09:31 +0000 (17:09 +1100) | ||
committer | Jonathan Nieder <jrnieder@gmail.com> | |
Sat, 26 Mar 2011 06:00:05 +0000 (01:00 -0500) |
Currently there are two functions to retrieve the mode and content
at a path:
const char *repo_read_path(const uint32_t *path);
uint32_t repo_read_mode(const uint32_t *path)
Replace them with a single function with two return values. This
means we can use one round-trip to get the same information from
fast-import that previously took two.
Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
at a path:
const char *repo_read_path(const uint32_t *path);
uint32_t repo_read_mode(const uint32_t *path)
Replace them with a single function with two return values. This
means we can use one round-trip to get the same information from
fast-import that previously took two.
Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
vcs-svn/repo_tree.c | patch | blob | history | |
vcs-svn/repo_tree.h | patch | blob | history | |
vcs-svn/svndump.c | patch | blob | history |
diff --git a/vcs-svn/repo_tree.c b/vcs-svn/repo_tree.c
index e75f58087c23f75fbb6b61fdf1a795e06d4832df..1681b654d1afa69884b695e0adc87d4031f7c230 100644 (file)
--- a/vcs-svn/repo_tree.c
+++ b/vcs-svn/repo_tree.c
#include "repo_tree.h"
#include "fast_export.h"
-const char *repo_read_path(const uint32_t *path)
+const char *repo_read_path(const uint32_t *path, uint32_t *mode_out)
{
int err;
- uint32_t dummy;
static struct strbuf buf = STRBUF_INIT;
strbuf_reset(&buf);
- err = fast_export_ls(REPO_MAX_PATH_DEPTH, path, &dummy, &buf);
+ err = fast_export_ls(REPO_MAX_PATH_DEPTH, path, mode_out, &buf);
if (err) {
if (errno != ENOENT)
die_errno("BUG: unexpected fast_export_ls error");
+ /* Treat missing paths as directories. */
+ *mode_out = REPO_MODE_DIR;
return NULL;
}
return buf.buf;
}
-uint32_t repo_read_mode(const uint32_t *path)
-{
- int err;
- uint32_t result;
- static struct strbuf dummy = STRBUF_INIT;
-
- strbuf_reset(&dummy);
- err = fast_export_ls(REPO_MAX_PATH_DEPTH, path, &result, &dummy);
- if (err) {
- if (errno != ENOENT)
- die_errno("BUG: unexpected fast_export_ls error");
- /* Treat missing paths as directories. */
- return REPO_MODE_DIR;
- }
- return result;
-}
-
void repo_copy(uint32_t revision, const uint32_t *src, const uint32_t *dst)
{
int err;
diff --git a/vcs-svn/repo_tree.h b/vcs-svn/repo_tree.h
index d690784fbbddd7743e9e97484cb81c2dbcf61327..f506352dc2d560442f7c45c7df35516fe3fef69e 100644 (file)
--- a/vcs-svn/repo_tree.h
+++ b/vcs-svn/repo_tree.h
uint32_t next_blob_mark(void);
void repo_copy(uint32_t revision, const uint32_t *src, const uint32_t *dst);
void repo_add(uint32_t *path, uint32_t mode, uint32_t blob_mark);
-const char *repo_read_path(const uint32_t *path);
-uint32_t repo_read_mode(const uint32_t *path);
+const char *repo_read_path(const uint32_t *path, uint32_t *mode_out);
void repo_delete(uint32_t *path);
void repo_commit(uint32_t revision, uint32_t author, char *log, uint32_t uuid,
uint32_t url, long unsigned timestamp);
diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c
index 7ecb227a6d62abd2031de44af646b19bc9fcf539..99a5ba0d1008083a2a0c868d1984f44c03ba4232 100644 (file)
--- a/vcs-svn/svndump.c
+++ b/vcs-svn/svndump.c
old_data = NULL;
} else if (node_ctx.action == NODEACT_CHANGE) {
uint32_t mode;
- old_data = repo_read_path(node_ctx.dst);
- mode = repo_read_mode(node_ctx.dst);
+ old_data = repo_read_path(node_ctx.dst, &mode);
if (mode == REPO_MODE_DIR && type != REPO_MODE_DIR)
die("invalid dump: cannot modify a directory into a file");
if (mode != REPO_MODE_DIR && type == REPO_MODE_DIR)