svn commit: r221977 - in user/des/svnsup: bin/distill
include/svnsup lib/libsvnsup
Dag-Erling Smorgrav
des at FreeBSD.org
Sun May 15 23:10:14 UTC 2011
Author: des
Date: Sun May 15 23:10:13 2011
New Revision: 221977
URL: http://svn.freebsd.org/changeset/base/221977
Log:
Add support for writing the delta to a file instead of stdout.
In svnsup_delta_shorten_path(), fix the case where the path is empty,
i.e. the delta is relative to the root of the repo.
Modified:
user/des/svnsup/bin/distill/distill.c
user/des/svnsup/include/svnsup/delta.h
user/des/svnsup/include/svnsup/error.h
user/des/svnsup/lib/libsvnsup/svnsup_delta.c
Modified: user/des/svnsup/bin/distill/distill.c
==============================================================================
--- user/des/svnsup/bin/distill/distill.c Sun May 15 22:46:45 2011 (r221976)
+++ user/des/svnsup/bin/distill/distill.c Sun May 15 23:10:13 2011 (r221977)
@@ -43,7 +43,7 @@ int extended; /* generated extended de
int verbose; /* show messages from libsvn */
static int
-distill(const char *url, unsigned long revision)
+distill(const char *url, unsigned long revision, const char *ofn)
{
apr_hash_t *config;
apr_pool_t *pool;
@@ -94,7 +94,7 @@ distill(const char *url, unsigned long r
++subdir;
/* XXX create delta */
- err = svnsup_create_delta(&sd);
+ err = svnsup_create_delta(&sd, ofn);
SVNSUP_SVNSUP_ERROR(err, "svnsup_delta_create()");
err = svnsup_delta_root(sd, root);
SVNSUP_SVNSUP_ERROR(err, "svnsup_delta_root()");
@@ -126,7 +126,7 @@ static void
usage(void)
{
- fprintf(stderr, "usage: svnsup-distill [-dev] url rev\n");
+ fprintf(stderr, "usage: svnsup-distill [-dev] [-o file] url rev\n");
exit(1);
}
@@ -134,12 +134,13 @@ int
main(int argc, char *argv[])
{
apr_status_t status;
+ const char *ofn = NULL;
const char *url;
char *end, *revstr;
unsigned long rev;
int opt, ret;
- while ((opt = getopt(argc, argv, "dev")) != -1)
+ while ((opt = getopt(argc, argv, "deo:v")) != -1)
switch (opt) {
case 'd':
++debug;
@@ -147,6 +148,9 @@ main(int argc, char *argv[])
case 'e':
++extended;
break;
+ case 'o':
+ ofn = optarg;
+ break;
case 'v':
++verbose;
break;
@@ -172,7 +176,7 @@ main(int argc, char *argv[])
if (status != APR_SUCCESS)
return (1);
- ret = distill(url, rev);
+ ret = distill(url, rev, ofn);
apr_terminate();
return (ret);
Modified: user/des/svnsup/include/svnsup/delta.h
==============================================================================
--- user/des/svnsup/include/svnsup/delta.h Sun May 15 22:46:45 2011 (r221976)
+++ user/des/svnsup/include/svnsup/delta.h Sun May 15 23:10:13 2011 (r221977)
@@ -33,7 +33,7 @@
typedef struct svnsup_delta *svnsup_delta_t;
typedef struct svnsup_delta_file *svnsup_delta_file_t;
-int svnsup_create_delta(svnsup_delta_t *);
+int svnsup_create_delta(svnsup_delta_t *, const char *);
int svnsup_close_delta(svnsup_delta_t);
int svnsup_delta_root(svnsup_delta_t, const char *);
Modified: user/des/svnsup/include/svnsup/error.h
==============================================================================
--- user/des/svnsup/include/svnsup/error.h Sun May 15 22:46:45 2011 (r221976)
+++ user/des/svnsup/include/svnsup/error.h Sun May 15 23:10:13 2011 (r221977)
@@ -32,6 +32,7 @@
typedef enum svnsup_err {
SVNSUP_ERR_NONE,
+ SVNSUP_ERR_FILE,
SVNSUP_ERR_MEMORY,
SVNSUP_ERR_UNKNOWN,
SVNSUP_ERR_MAX,
Modified: user/des/svnsup/lib/libsvnsup/svnsup_delta.c
==============================================================================
--- user/des/svnsup/lib/libsvnsup/svnsup_delta.c Sun May 15 22:46:45 2011 (r221976)
+++ user/des/svnsup/lib/libsvnsup/svnsup_delta.c Sun May 15 23:10:13 2011 (r221977)
@@ -90,6 +90,10 @@ static const char *
svnsup_delta_shorten_path(svnsup_delta_t sd, const char *pn)
{
+ assert(sd->path != NULL);
+ assert(pn != NULL);
+ if (*sd->path == '\0')
+ return (pn);
assert(strstr(pn, sd->path) == pn);
pn += strlen(sd->path);
assert(*pn == '/' || *pn == '\0');
@@ -102,13 +106,18 @@ svnsup_delta_shorten_path(svnsup_delta_t
* Create an svnsup delta.
*/
int
-svnsup_create_delta(svnsup_delta_t *sdp)
+svnsup_create_delta(svnsup_delta_t *sdp, const char *ofn)
{
svnsup_delta_t sd;
if ((sd = calloc(1, sizeof *sd)) == NULL)
return (SVNSUP_ERR_MEMORY);
- sd->f = stdout;
+ if (ofn == NULL) {
+ sd->f = stdout;
+ } else if ((sd->f = fopen(ofn, "w")) == NULL) {
+ free(sd);
+ return (SVNSUP_ERR_FILE);
+ }
*sdp = sd;
return (SVNSUP_ERR_NONE);
}
More information about the svn-src-user
mailing list