Merge branch 'svn-fe' of git://repo.or.cz/git/jrn
authorJunio C Hamano <gitster@pobox.com>
Wed, 23 Mar 2011 03:51:07 +0000 (20:51 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 23 Mar 2011 03:51:07 +0000 (20:51 -0700)
* '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

1  2 
vcs-svn/repo_tree.c
diff --combined vcs-svn/repo_tree.c
index 207ffc3a831d31b1504838555c15a424c81754f5,d722e3212fa7db5e3b3f6ddbd32765b5172b7063..632dbd87360b0a4a0c2fa2d401a775e9939bab35
@@@ -38,7 -38,7 +38,7 @@@ static uint32_t mark
  static int repo_dirent_name_cmp(const void *a, const void *b);
  
  /* Treap for directory entries */
 -trp_gen(static, dent_, struct repo_dirent, children, dent, repo_dirent_name_cmp);
 +trp_gen(static, dent_, struct repo_dirent, children, dent, repo_dirent_name_cmp)
  
  uint32_t next_blob_mark(void)
  {
@@@ -87,7 -87,8 +87,8 @@@ static struct repo_dir *repo_clone_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));
        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;
                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;
                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)
        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 +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();