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
This commit is contained in:
@ -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();
|
||||
|
Reference in New Issue
Block a user