Hello there,
Attached is a patch that teaches svn_repos_history to use a limit argument, equivalent to svn_repos_get_logs3. The reason why I would like to have
that functionality can be read here: http://viewvc.tigris.org/servlets/ReadMsg?list=dev&msgNo=2793. Any chance that this patch can made it into svn 1.5?
Any reviews, remarks are welcome of course.
Regards,
Jens
-----------------------------------------
[[[
Teach svn_repos_history to use a limit argument, equivalent to svn_repos_get_logs.
* subversion/include/svn_repos.h
Add svn_repos_history3 and depricate svn_repos_history2.
* subversion/libsvn_repos/rev_hunt.c (svn_repos_history3)
New function, implement limit functionality over svn_repos_history2
* subversion/libsvn_repos/rev_hunt.c (svn_repos_history2)
redirect to svn_repos_history3, limit is always 0
* subversion/svnlook/main.c
Let svnlook use svn_repos_history3. However, limit is always 0,
so actually no output changes.
]]]
[[[
Index: subversion/include/svn_repos.h
===================================================================
--- subversion/include/svn_repos.h (revision 25731)
+++ subversion/include/svn_repos.h (working copy)
@@ -1026,9 +1026,31 @@
* them; instead, immediately stop traversing history and return
* SVN_NO_ERROR.
*
- * @since New in 1.1.
+ * If @a limit is non-zero then only invoke @a history_func on the first
+ * @a limit locations.
+ *
+ * @since New in 1.5.
*/
svn_error_t *
+svn_repos_history3(svn_fs_t *fs,
+ const char *path,
+ svn_repos_history_func_t history_func,
+ void *history_baton,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ int limit,
+ svn_boolean_t cross_copies,
+ apr_pool_t *pool);
+
+
+/**
+ * Same as svn_repos_history3(), but with @a limit always set to 0.
+ *
+ * @deprecated Provided for backward compatibility with the 1.1 API.
+ */
+svn_error_t *
svn_repos_history2(svn_fs_t *fs,
const char *path,
svn_repos_history_func_t history_func,
@@ -1041,8 +1063,8 @@
apr_pool_t *pool);
/**
- * Similar to svn_repos_history2(), but with @a authz_read_func
- * and @a authz_read_baton always set to NULL.
+ * Same as svn_repos_history3(), but with @a limit always set to 0 and
+ * with @a authz_read_func and @a authz_read_baton always set to NULL.
*
* @deprecated Provided for backward compatibility with the 1.0 API.
*/
Index: subversion/libsvn_repos/rev_hunt.c
===================================================================
--- subversion/libsvn_repos/rev_hunt.c (revision 25731)
+++ subversion/libsvn_repos/rev_hunt.c (working copy)
@@ -192,7 +192,7 @@
}
-
+/* Deprecated. */
svn_error_t *
svn_repos_history2(svn_fs_t *fs,
const char *path,
@@ -205,12 +205,33 @@
svn_boolean_t cross_copies,
apr_pool_t *pool)
{
+ return svn_repos_history3(fs, path, history_func, history_baton,
+ authz_read_func, authz_read_baton,
+ start, end, 0, cross_copies, pool);
+}
+
+
+
+svn_error_t *
+svn_repos_history3(svn_fs_t *fs,
+ const char *path,
+ svn_repos_history_func_t history_func,
+ void *history_baton,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ int limit,
+ svn_boolean_t cross_copies,
+ apr_pool_t *pool)
+{
svn_fs_history_t *history;
apr_pool_t *oldpool = svn_pool_create(pool);
apr_pool_t *newpool = svn_pool_create(pool);
const char *history_path;
svn_revnum_t history_rev;
svn_fs_root_t *root;
+ int count = 0;
/* Validate the revisions. */
if (! SVN_IS_VALID_REVNUM(start))
@@ -267,6 +288,11 @@
if (history_rev < start)
break;
+ /* If limit is set and we reaches limt, quit
+ here. */
+ if (limit && count >= limit)
+ break;
+
/* Is the history item readable? If not, quit. */
if (authz_read_func)
{
@@ -290,6 +316,8 @@
tmppool = oldpool;
oldpool = newpool;
newpool = tmppool;
+
+ count++;
}
while (history); /* shouldn't hit this */
Index: subversion/svnlook/main.c
===================================================================
--- subversion/svnlook/main.c (revision 25731)
+++ subversion/svnlook/main.c (working copy)
@@ -1390,8 +1390,8 @@
copies. */
args.fs = c->fs;
args.show_ids = show_ids;
- SVN_ERR(svn_repos_history2(c->fs, path, print_history, &args,
- NULL, NULL, 0, c->rev_id, 1, pool));
+ SVN_ERR(svn_repos_history3(c->fs, path, print_history, &args,
+ NULL, NULL, 0, c->rev_id, 0, 1, pool));
return SVN_NO_ERROR;
}
]]]
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Fri Jul 13 15:24:39 2007