vcs-svn: simplify repo_modify_path and repo_copy
authorJonathan Nieder <jrnieder@gmail.com>
Fri, 10 Dec 2010 06:53:54 +0000 (00:53 -0600)
committerJonathan Nieder <jrnieder@gmail.com>
Mon, 7 Mar 2011 06:56:50 +0000 (00:56 -0600)
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>
vcs-svn/repo_tree.c
vcs-svn/repo_tree.h
vcs-svn/svndump.c

index 8763de5c29f45105b6a32a39e0d0da918a2cf4f0..14bcc192b6db76962c1238cb179c46ac927a4938 100644 (file)
@@ -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);
index 3202bbeffeefa4b809422fd2ab8c36fc85838a20..11d48c2444a0bfad1fad1c18ea9f8a310ed2e0a7 100644 (file)
 #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);
index f07376f964d7a5b65cc1f5b2f4c8164bd5f2ab79..e6d84bada579c26cdb776569fa520103fe7d9dd2 100644 (file)
@@ -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)