Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 May 2011 23:10:14 +0000 (UTC)
From:      Dag-Erling Smorgrav <des@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r221977 - in user/des/svnsup: bin/distill include/svnsup lib/libsvnsup
Message-ID:  <201105152310.p4FNAEYS056515@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201105152310.p4FNAEYS056515>