bisect: introduce support for --no-checkout option.
[gitweb.git] / vcs-svn / repo_tree.c
index 207ffc3a831d31b1504838555c15a424c81754f5..a21d89de97404479ecf2ca46824f61acb7af56e6 100644 (file)
@@ -87,7 +87,8 @@ static struct repo_dir *repo_clone_dir(struct repo_dir *orig_dir)
        return dir_pointer(new_o);
 }
 
-static struct repo_dirent *repo_read_dirent(uint32_t revision, uint32_t *path)
+static struct repo_dirent *repo_read_dirent(uint32_t revision,
+                                           const uint32_t *path)
 {
        uint32_t name = 0;
        struct repo_dirent *key = dent_pointer(dent_alloc(1));
@@ -105,7 +106,7 @@ static struct repo_dirent *repo_read_dirent(uint32_t revision, uint32_t *path)
        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;
@@ -157,7 +158,24 @@ static void repo_write_dirent(uint32_t *path, uint32_t mode,
                dent_remove(&dir_pointer(parent_dir_o)->entries, dent);
 }
 
-uint32_t repo_copy(uint32_t revision, uint32_t *src, uint32_t *dst)
+uint32_t repo_read_path(const uint32_t *path)
+{
+       uint32_t content_offset = 0;
+       struct repo_dirent *dent = repo_read_dirent(active_commit, path);
+       if (dent != NULL)
+               content_offset = dent->content_offset;
+       return content_offset;
+}
+
+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;
@@ -167,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)
@@ -175,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);
@@ -275,8 +278,9 @@ void repo_diff(uint32_t r1, uint32_t r2)
                    repo_commit_root_dir(commit_pointer(r2)));
 }
 
-void repo_commit(uint32_t revision, uint32_t author, char *log, uint32_t uuid,
-                uint32_t url, unsigned long timestamp)
+void repo_commit(uint32_t revision, const char *author,
+               const struct strbuf *log, const char *uuid, const char *url,
+               unsigned long timestamp)
 {
        fast_export_commit(revision, author, log, uuid, url, timestamp);
        dent_commit();