On the sqlite-mergeinfo-without-mergeinfo branch:

[Note: I think this branch may be a dead end, but I will be porting
part of this revision to the sqlite-deep-copies branch.]

Implement svn_fs_get_mergeinfo_for_tree using new in-FS metadata
instead of sqlite.  Tests don't all pass, because file-not-found
errors are thrown; I believe this is because higher-level code is
written to incorrectly mask errors, not because of bugs in this code
(but who knows!).

Pool usage may be poor; this is noted (cryptically) as /* XXXdsg go
swimming */.

* subversion/libsvn_fs_fs/tree.c
  (get_mergeinfo_hash_for_path): Don't mask file-not-found errors.
  (crawl_directory_dag_for_mergeinfo): New helper, which walks the FS,
   only looking at nodes that actually have mergeinfo (which can be
   efficiently found based on the new tags), and merges the mergeinfo
   into a single hash.
  (get_mergeinfo_hash_for_tree): The core of the
   svn_fs_get_mergeinfo_for_tree implementation, which uses the above
   helper.
  (fs_get_mergeinfo_for_tree): Use the above helpers instead of a
   blatantly incorrect query.

* subversion/libsvn_fs_fs/dag.h
* subversion/libsvn_fs_fs/dag.c
  (svn_fs_fs__dag_has_descendents_with_mergeinfo): New helper
   function.

* subversion/libsvn_repos/log.c
  (get_combined_mergeinfo): When querying the previous revision, only
   query mergeinfo for paths that exist in the previous revision.


git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/sqlite-mergeinfo-without-mergeinfo@868268 13f79535-47bb-0310-9956-ffa450edef68
4 files changed