Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
implement pkg create -n
Baptiste Daroussin committed 14 years ago
commit 9a53e251bf523e5098a27a2cb5cd4d5c4f31a641
parent 9b71965
2 files changed +37 -7
modified pkg/create.c
@@ -12,20 +12,21 @@
void
usage_create(void)
{
-
	fprintf(stderr, "usage: pkg create [-gx] [-r rootdir] [-m manifest] [-f format] [-o outdir] "
+
	fprintf(stderr, "usage: pkg create [-gx] [-n] [-r rootdir] [-m manifest] [-f format] [-o outdir] "
			"<pkg> ...\n");
-
	fprintf(stderr, "       pkg create -a [-r rootdir] [-m manifest] [-f format] [-o outdir]\n\n");
+
	fprintf(stderr, "       pkg create -a [-n] [-r rootdir] [-m manifest] [-f format] [-o outdir]\n\n");
	fprintf(stderr, "For more information see 'pkg help create'.\n");
}

static int
-
pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt, const char * const outdir, const char * const rootdir)
+
pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt, const char * const outdir, const char * const rootdir, bool overwrite)
{
	int i, ret = EPKG_OK, retcode = EPKG_OK;
	struct pkgdb *db = NULL;
	struct pkgdb_it *it = NULL;
	struct pkg *pkg = NULL;
	const char *name, *version;
+
	char pkgpath[MAXPATHLEN];
	int query_flags = PKG_LOAD_DEPS | PKG_LOAD_FILES | PKG_LOAD_CATEGORIES |
	    PKG_LOAD_DIRS | PKG_LOAD_SCRIPTS | PKG_LOAD_OPTIONS |
	    PKG_LOAD_MTREE | PKG_LOAD_LICENSES | PKG_LOAD_USERS | PKG_LOAD_GROUPS;
@@ -42,6 +43,29 @@ pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt, const
			}
			while ((ret = pkgdb_it_next(it, &pkg, query_flags)) == EPKG_OK) {
				pkg_get(pkg, PKG_NAME, &name, PKG_VERSION, &version);
+
				if (!overwrite) {
+
					const char *format;
+
					switch (fmt) {
+
						case TXZ:
+
							format = "txz";
+
							break;
+
						case TBZ:
+
							format = "tbz";
+
							break;
+
						case TGZ:
+
							format = "tgz";
+
							break;
+
						case TAR:
+
							format = "tar";
+
							break;
+
					}
+

+
					snprintf(pkgpath, MAXPATHLEN, "%s/%s-%s.%s", outdir, name, version, format);
+
					if (access(pkgpath, F_OK) == 0) {
+
						printf("%s-%s already packaged skipping...\n", name, version);
+
						continue;
+
					}
+
				}
				printf("Creating package for %s-%s\n", name, version);
				if (pkg_create_installed(outdir, fmt, rootdir, pkg) != EPKG_OK)
					retcode++;
@@ -89,10 +113,11 @@ exec_create(int argc, char **argv)
	const char *format = NULL;
	const char *rootdir = NULL;
	const char *manifestdir = NULL;
+
	bool overwrite = true;
	pkg_formats fmt;
	int ch;

-
	while ((ch = getopt(argc, argv, "agxXf:r:m:o:")) != -1) {
+
	while ((ch = getopt(argc, argv, "agxXf:r:m:o:n")) != -1) {
		switch (ch) {
			case 'a':
				match = MATCH_ALL;
@@ -118,6 +143,9 @@ exec_create(int argc, char **argv)
			case 'm':
				manifestdir = optarg;
				break;
+
			case 'n':
+
				overwrite = false;
+
				break;
		}
	}
	argc -= optind;
@@ -149,7 +177,7 @@ exec_create(int argc, char **argv)
	}

	if (manifestdir == NULL)
-
		return pkg_create_matches(argc, argv, match, fmt, outdir, rootdir);
+
		return pkg_create_matches(argc, argv, match, fmt, outdir, rootdir, overwrite);
	else
		return pkg_create_fakeroot(outdir, fmt, rootdir, manifestdir);
}
modified pkg/pkg-create.1
@@ -25,14 +25,14 @@
.\" ---------------------------------------------------------------------------
.Sh SYNOPSIS
.Nm
-
.Op Fl gxX
+
.Op Fl gxXn
.Op Fl r Ar rootdir
.Op Fl m Ar manifest
.Op Fl f Ar format
.Op Fl o Ar outdir
.Ar pkg-name ...
.Nm
-
.Fl a
+
.Fl an
.Op Fl r Ar rootdir
.Op Fl m Ar manifest
.Op Fl f Ar format
@@ -94,6 +94,8 @@ Set
.Ar outdir
as the output directory. If this option is not given, all created packages will
be saved in the current directory.
+
.It Fl n
+
Do not overwrite already existing packages
.El
.\" ---------------------------------------------------------------------------
.Sh MANIFEST FILE DETAILS