diff options
author | Jonathan Nieder <jrnieder@gmail.com> | 2010-12-10 09:53:54 +0300 |
---|---|---|
committer | Jonathan Nieder <jrnieder@gmail.com> | 2011-03-07 09:56:50 +0300 |
commit | e75316de5340e0ba3ac75937c59fa2c9d6ab48d7 (patch) | |
tree | 9b3b17b1f662c3a59db3fa5edbc4e0d4add851b1 | |
parent | 5a38b186d3ac5840d6ae78511d6dccab8367f242 (diff) |
vcs-svn: simplify repo_modify_path and repo_copy
Restrict the repo_tree API to functions that are actually needed.
- decouple reading the mode and content of dirents from other
operations.
- remove repo_modify_path. It is only used to read the mode from
dirents.
- remove the ability to use repo_read_mode on a missing path. The
existing code only errors out in that case, anyway.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
-rw-r--r-- | vcs-svn/repo_tree.c | 27 | ||||
-rw-r--r-- | vcs-svn/repo_tree.h | 4 | ||||
-rw-r--r-- | vcs-svn/svndump.c | 4 |
3 files changed, 13 insertions, 22 deletions
diff --git a/vcs-svn/repo_tree.c b/vcs-svn/repo_tree.c index 8763de5c29..14bcc192b6 100644 --- a/vcs-svn/repo_tree.c +++ b/vcs-svn/repo_tree.c @@ -106,7 +106,7 @@ static struct repo_dirent *repo_read_dirent(uint32_t revision, return dent; } -static void repo_write_dirent(uint32_t *path, uint32_t mode, +static void repo_write_dirent(const uint32_t *path, uint32_t mode, uint32_t content_offset, uint32_t del) { uint32_t name, revision, dir_o = ~0, parent_dir_o = ~0; @@ -167,7 +167,15 @@ uint32_t repo_read_path(const uint32_t *path) return content_offset; } -uint32_t repo_copy(uint32_t revision, uint32_t *src, uint32_t *dst) +uint32_t repo_read_mode(const uint32_t *path) +{ + struct repo_dirent *dent = repo_read_dirent(active_commit, path); + if (dent == NULL) + die("invalid dump: path to be modified is missing"); + return dent->mode; +} + +void repo_copy(uint32_t revision, const uint32_t *src, const uint32_t *dst) { uint32_t mode = 0, content_offset = 0; struct repo_dirent *src_dent; @@ -177,7 +185,6 @@ uint32_t repo_copy(uint32_t revision, uint32_t *src, uint32_t *dst) content_offset = src_dent->content_offset; repo_write_dirent(dst, mode, content_offset, 0); } - return mode; } void repo_add(uint32_t *path, uint32_t mode, uint32_t blob_mark) @@ -185,20 +192,6 @@ void repo_add(uint32_t *path, uint32_t mode, uint32_t blob_mark) repo_write_dirent(path, mode, blob_mark, 0); } -uint32_t repo_modify_path(uint32_t *path, uint32_t mode, uint32_t blob_mark) -{ - struct repo_dirent *src_dent; - src_dent = repo_read_dirent(active_commit, path); - if (!src_dent) - return 0; - if (!blob_mark) - blob_mark = src_dent->content_offset; - if (!mode) - mode = src_dent->mode; - repo_write_dirent(path, mode, blob_mark, 0); - return mode; -} - void repo_delete(uint32_t *path) { repo_write_dirent(path, 0, 0, 1); diff --git a/vcs-svn/repo_tree.h b/vcs-svn/repo_tree.h index 3202bbeffe..11d48c2444 100644 --- a/vcs-svn/repo_tree.h +++ b/vcs-svn/repo_tree.h @@ -12,10 +12,10 @@ #define REPO_MAX_PATH_DEPTH 1000 uint32_t next_blob_mark(void); -uint32_t repo_copy(uint32_t revision, uint32_t *src, uint32_t *dst); +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); -uint32_t repo_modify_path(uint32_t *path, uint32_t mode, uint32_t blob_mark); uint32_t repo_read_path(const uint32_t *path); +uint32_t repo_read_mode(const uint32_t *path); 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 f07376f964..e6d84bada5 100644 --- a/vcs-svn/svndump.c +++ b/vcs-svn/svndump.c @@ -235,9 +235,7 @@ static void handle_node(void) uint32_t mode; if (!have_text) mark = repo_read_path(node_ctx.dst); - mode = repo_modify_path(node_ctx.dst, 0, 0); - if (!mode) - die("invalid dump: path to be modified is missing"); + mode = repo_read_mode(node_ctx.dst); 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) |