diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-03-22 20:51:07 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-03-22 20:51:07 -0700 |
commit | 785d6989dac6a61eabdc06c781ee0f47d10f36c0 (patch) | |
tree | 1a0f9d8a139d554d78955061dacf0355d224cb80 /vcs-svn/repo_tree.c | |
parent | 1ea9f9d6c28caf886747ca256e9d39d24f03d229 (diff) | |
parent | 41b9dd9d4f2f32f8450af59c30f3a7a2fc5a8cc7 (diff) | |
download | git-785d6989dac6a61eabdc06c781ee0f47d10f36c0.tar.gz git-785d6989dac6a61eabdc06c781ee0f47d10f36c0.tar.xz |
Merge branch 'svn-fe' of git://repo.or.cz/git/jrn
* 'svn-fe' of git://repo.or.cz/git/jrn:
vcs-svn: use strchr to find RFC822 delimiter
vcs-svn: implement perfect hash for top-level keys
vcs-svn: implement perfect hash for node-prop keys
vcs-svn: use strbuf for author, UUID, and URL
vcs-svn: use strbuf for revision log
vcs-svn: improve reporting of input errors
vcs-svn: make buffer_copy_bytes return length read
vcs-svn: make buffer_skip_bytes return length read
vcs-svn: improve support for reading large files
vcs-svn: allow input errors to be detected promptly
vcs-svn: simplify repo_modify_path and repo_copy
vcs-svn: handle_node: use repo_read_path
vcs-svn: introduce repo_read_path to check the content at a path
Diffstat (limited to 'vcs-svn/repo_tree.c')
-rw-r--r-- | vcs-svn/repo_tree.c | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/vcs-svn/repo_tree.c b/vcs-svn/repo_tree.c index 207ffc3a8..632dbd873 100644 --- a/vcs-svn/repo_tree.c +++ b/vcs-svn/repo_tree.c @@ -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,8 @@ 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, char *log, + const char *uuid, const char *url, unsigned long timestamp) { fast_export_commit(revision, author, log, uuid, url, timestamp); dent_commit(); |