svn commit: r202841 - in stable/7/usr.sbin/pkg_install: add create
delete info lib updating version
Florent Thoumie
flz at FreeBSD.org
Fri Jan 22 23:17:07 UTC 2010
Author: flz
Date: Fri Jan 22 23:17:07 2010
New Revision: 202841
URL: http://svn.freebsd.org/changeset/base/202841
Log:
Synchronize pkg_install with HEAD.
Modified:
stable/7/usr.sbin/pkg_install/add/main.c
stable/7/usr.sbin/pkg_install/add/perform.c
stable/7/usr.sbin/pkg_install/create/main.c
stable/7/usr.sbin/pkg_install/create/perform.c
stable/7/usr.sbin/pkg_install/delete/Makefile
stable/7/usr.sbin/pkg_install/delete/main.c
stable/7/usr.sbin/pkg_install/info/Makefile
stable/7/usr.sbin/pkg_install/info/main.c
stable/7/usr.sbin/pkg_install/info/perform.c
stable/7/usr.sbin/pkg_install/lib/lib.h
stable/7/usr.sbin/pkg_install/lib/pen.c
stable/7/usr.sbin/pkg_install/lib/plist.c
stable/7/usr.sbin/pkg_install/lib/url.c
stable/7/usr.sbin/pkg_install/updating/Makefile
stable/7/usr.sbin/pkg_install/version/Makefile
stable/7/usr.sbin/pkg_install/version/main.c
Modified: stable/7/usr.sbin/pkg_install/add/main.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/add/main.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/add/main.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -82,13 +82,15 @@ struct {
{ 700000, 700099, "/packages-7.0-release" },
{ 701000, 701099, "/packages-7.1-release" },
{ 702000, 702099, "/packages-7.2-release" },
+ { 800000, 800499, "/packages-8.0-release" },
{ 300000, 399000, "/packages-3-stable" },
{ 400000, 499000, "/packages-4-stable" },
{ 502100, 502128, "/packages-5-current" },
{ 503100, 599000, "/packages-5-stable" },
{ 600100, 699000, "/packages-6-stable" },
{ 700100, 799000, "/packages-7-stable" },
- { 800000, 899000, "/packages-8-current" },
+ { 800500, 899000, "/packages-8-stable" },
+ { 900000, 999000, "/packages-9-current" },
{ 0, 9999999, "/packages-current" },
{ 0, 0, NULL }
};
@@ -342,7 +344,7 @@ getpackagesite(void)
}
static void
-usage()
+usage(void)
{
fprintf(stderr, "%s\n%s\n",
"usage: pkg_add [-viInfFrRMSK] [-t template] [-p prefix] [-P prefix] [-C chrootdir]",
Modified: stable/7/usr.sbin/pkg_install/add/perform.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/add/perform.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/add/perform.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -52,9 +52,6 @@ pkg_perform(char **pkgs)
return err_cnt;
}
-static Package Plist;
-static char *Home;
-
/*
* This is seriously ugly code following. Written very fast!
* [And subsequently made even worse.. Sigh! This code was just born
@@ -63,10 +60,12 @@ static char *Home;
static int
pkg_do(char *pkg)
{
+ Package Plist;
char pkg_fullname[FILENAME_MAX];
char playpen[FILENAME_MAX];
char extract_contents[FILENAME_MAX];
- char *where_to, *extract;
+ char *extract;
+ const char *where_to;
FILE *cfile;
int code;
PackingList p;
@@ -87,6 +86,8 @@ pkg_do(char *pkg)
strcpy(playpen, FirstPen);
inPlace = 0;
+ memset(&Plist, '\0', sizeof(Plist));
+
/* Are we coming in for a second pass, everything already extracted? */
if (!pkg) {
fgets(playpen, FILENAME_MAX, stdin);
@@ -102,11 +103,10 @@ pkg_do(char *pkg)
else {
/* Is it an ftp://foo.bar.baz/file.t[bg]z specification? */
if (isURL(pkg)) {
- if (!(Home = fileGetURL(NULL, pkg, KeepPackage))) {
+ if (!(where_to = fileGetURL(NULL, pkg, KeepPackage))) {
warnx("unable to fetch '%s' by URL", pkg);
return 1;
}
- where_to = Home;
strcpy(pkg_fullname, pkg);
cfile = fopen(CONTENTS_FNAME, "r");
if (!cfile) {
@@ -135,13 +135,11 @@ pkg_do(char *pkg)
extract = NULL;
sb.st_size = 100000; /* Make up a plausible average size */
}
- Home = make_playpen(playpen, sb.st_size * 4);
- if (!Home)
+ if (!(where_to = make_playpen(playpen, sb.st_size * 4)))
errx(1, "unable to make playpen for %lld bytes", (long long)sb.st_size * 4);
- where_to = Home;
/* Since we can call ourselves recursively, keep notes on where we came from */
if (!getenv("_TOP"))
- setenv("_TOP", Home, 1);
+ setenv("_TOP", where_to, 1);
if (unpack(pkg_fullname, extract)) {
warnx(
"unable to extract table of contents file from '%s' - not a package?",
@@ -280,6 +278,44 @@ pkg_do(char *pkg)
warnx("-f specified; proceeding anyway");
}
+#if ENSURE_THAT_ALL_REQUIREMENTS_ARE_MET
+ /*
+ * Before attempting to do the slave mode bit, ensure that we've
+ * downloaded & processed everything we need.
+ * It's possible that we haven't already installed all of our
+ * dependencies if the dependency list was misgenerated due to
+ * other dynamic dependencies or if a dependency was added to a
+ * package without all REQUIRED_BY packages being regenerated.
+ */
+ for (p = pkg ? Plist.head : NULL; p; p = p->next) {
+ const char *ext;
+ char *deporigin;
+
+ if (p->type != PLIST_PKGDEP)
+ continue;
+ deporigin = (p->next->type == PLIST_DEPORIGIN) ? p->next->name : NULL;
+
+ if (isinstalledpkg(p->name) <= 0 &&
+ !(deporigin != NULL && matchbyorigin(deporigin, NULL) != NULL)) {
+ char subpkg[FILENAME_MAX], *sep;
+
+ strlcpy(subpkg, pkg, sizeof subpkg);
+ if ((sep = strrchr(subpkg, '/')) != NULL) {
+ *sep = '\0';
+ if ((sep = strrchr(subpkg, '/')) != NULL) {
+ *sep = '\0';
+ strlcat(subpkg, "/All/", sizeof subpkg);
+ strlcat(subpkg, p->name, sizeof subpkg);
+ if ((ext = strrchr(pkg, '.')) == NULL)
+ ext = ".tbz";
+ strlcat(subpkg, ext, sizeof subpkg);
+ pkg_do(subpkg);
+ }
+ }
+ }
+ }
+#endif
+
/* Now check the packing list for dependencies */
for (p = Plist.head; p ; p = p->next) {
char *deporigin;
@@ -295,7 +331,8 @@ pkg_do(char *pkg)
}
if (isinstalledpkg(p->name) <= 0 &&
!(deporigin != NULL && matchbyorigin(deporigin, NULL) != NULL)) {
- char path[FILENAME_MAX], *cp = NULL;
+ char path[FILENAME_MAX];
+ const char *cp = NULL;
if (!Fake) {
char prefixArg[2 + MAXPATHLEN]; /* "-P" + Prefix */
@@ -333,7 +370,7 @@ pkg_do(char *pkg)
}
else if ((cp = fileGetURL(pkg, p->name, KeepPackage)) != NULL) {
if (Verbose)
- printf("Finished loading %s over FTP.\n", p->name);
+ printf("Finished loading %s via a URL\n", p->name);
if (!fexists("+CONTENTS")) {
warnx("autoloaded package %s has no +CONTENTS file?",
p->name);
@@ -645,7 +682,8 @@ cleanup(int sig)
printf("Signal %d received, cleaning up..\n", sig);
if (!Fake && zapLogDir && LogDir[0])
vsystem("%s -rf %s", REMOVE_CMD, LogDir);
- leave_playpen();
+ while (leave_playpen())
+ ;
}
if (sig)
exit(1);
Modified: stable/7/usr.sbin/pkg_install/create/main.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/create/main.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/create/main.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -249,7 +249,7 @@ main(int argc, char **argv)
}
static void
-usage()
+usage(void)
{
fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
"usage: pkg_create [-YNOhjnvyz] [-C conflicts] [-P pkgs] [-p prefix]",
Modified: stable/7/usr.sbin/pkg_install/create/perform.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/create/perform.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/create/perform.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -39,11 +39,10 @@ static void make_dist(const char *, cons
static int create_from_installed_recursive(const char *, const char *);
static int create_from_installed(const char *, const char *, const char *);
-static char *home;
-
int
pkg_perform(char **pkgs)
{
+ static const char *home;
char *pkg = *pkgs; /* Only one arg to create */
char *cp;
FILE *pkg_in, *fp;
Modified: stable/7/usr.sbin/pkg_install/delete/Makefile
==============================================================================
--- stable/7/usr.sbin/pkg_install/delete/Makefile Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/delete/Makefile Fri Jan 22 23:17:07 2010 (r202841)
@@ -5,7 +5,6 @@ SRCS= main.c perform.c
CFLAGS+= -I${.CURDIR}/../lib
-WARNS?= 6
WFORMAT?= 1
DPADD= ${LIBINSTALL} ${LIBMD}
Modified: stable/7/usr.sbin/pkg_install/delete/main.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/delete/main.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/delete/main.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -170,7 +170,7 @@ main(int argc, char **argv)
}
static void
-usage()
+usage(void)
{
fprintf(stderr, "%s\n%s\n",
"usage: pkg_delete [-dDfGinrvxX] [-p prefix] pkg-name ...",
Modified: stable/7/usr.sbin/pkg_install/info/Makefile
==============================================================================
--- stable/7/usr.sbin/pkg_install/info/Makefile Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/info/Makefile Fri Jan 22 23:17:07 2010 (r202841)
@@ -5,7 +5,6 @@ SRCS= main.c perform.c show.c
CFLAGS+= -I${.CURDIR}/../lib
-WARNS?= 6
WFORMAT?= 1
DPADD= ${LIBINSTALL} ${LIBFETCH} ${LIBMD}
Modified: stable/7/usr.sbin/pkg_install/info/main.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/info/main.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/info/main.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -282,7 +282,7 @@ main(int argc, char **argv)
}
static void
-usage()
+usage(void)
{
fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n",
"usage: pkg_info [-bcdDEfgGiIjkKLmopPqQrRsvVxX] [-e package] [-l prefix]",
Modified: stable/7/usr.sbin/pkg_install/info/perform.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/info/perform.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/info/perform.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -85,8 +85,6 @@ pkg_perform(char **pkgs)
return err_cnt;
}
-static char *Home;
-
static int
pkg_do(char *pkg)
{
@@ -96,7 +94,7 @@ pkg_do(char *pkg)
Package plist;
FILE *fp;
struct stat sb;
- char *cp = NULL;
+ const char *cp = NULL;
int code = 0;
if (isURL(pkg)) {
@@ -138,7 +136,7 @@ pkg_do(char *pkg)
code = 1;
goto bail;
}
- Home = make_playpen(PlayPen, sb.st_size / 2);
+ make_playpen(PlayPen, sb.st_size / 2);
if (unpack(fname, "'+*'")) {
warnx("error during unpacking, no info for '%s' available", pkg);
code = 1;
Modified: stable/7/usr.sbin/pkg_install/lib/lib.h
==============================================================================
--- stable/7/usr.sbin/pkg_install/lib/lib.h Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/lib/lib.h Fri Jan 22 23:17:07 2010 (r202841)
@@ -84,14 +84,14 @@
#define DISPLAY_FNAME "+DISPLAY"
#define MTREE_FNAME "+MTREE_DIRS"
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 800000
+#if defined(__FreeBSD_version) && __FreeBSD_version >= 900000
+#define INDEX_FNAME "INDEX-9"
+#elif defined(__FreeBSD_version) && __FreeBSD_version >= 800000
#define INDEX_FNAME "INDEX-8"
#elif defined(__FreeBSD_version) && __FreeBSD_version >= 700000
#define INDEX_FNAME "INDEX-7"
#elif defined(__FreeBSD_version) && __FreeBSD_version >= 600000
#define INDEX_FNAME "INDEX-6"
-#elif defined(__FreeBSD_version) && __FreeBSD_version >= 500036
-#define INDEX_FNAME "INDEX-5"
#else
#define INDEX_FNAME "INDEX"
#endif
@@ -102,10 +102,10 @@
#define PKG_PREFIX_VNAME "PKG_PREFIX"
/*
- * Version of the package tools - increase only when some
- * functionality used by bsd.port.mk is changed, added or removed
+ * Version of the package tools - increase whenever you make a change
+ * in the code that is not cosmetic only.
*/
-#define PKG_INSTALL_VERSION 20080708
+#define PKG_INSTALL_VERSION 20090902
#define PKG_WRAPCONF_FNAME "/var/db/pkg_install.conf"
#define main(argc, argv) real_main(argc, argv)
@@ -159,9 +159,9 @@ STAILQ_HEAD(reqr_by_head, reqr_by_entry)
int vsystem(const char *, ...);
char *vpipe(const char *, ...);
void cleanup(int);
-char *make_playpen(char *, off_t);
+const char *make_playpen(char *, off_t);
char *where_playpen(void);
-void leave_playpen(void);
+int leave_playpen(void);
off_t min_free(const char *);
/* String */
@@ -183,7 +183,7 @@ Boolean isfile(const char *);
Boolean isempty(const char *);
Boolean issymlink(const char *);
Boolean isURL(const char *);
-char *fileGetURL(const char *, const char *, int);
+const char *fileGetURL(const char *, const char *, int);
char *fileFindByPath(const char *, const char *);
char *fileGetContents(const char *);
void write_file(const char *, const char *);
Modified: stable/7/usr.sbin/pkg_install/lib/pen.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/lib/pen.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/lib/pen.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -31,7 +31,6 @@ __FBSDID("$FreeBSD$");
/* For keeping track of where we are */
static char PenLocation[FILENAME_MAX];
-static char Previous[FILENAME_MAX];
char *
where_playpen(void)
@@ -76,12 +75,14 @@ find_play_pen(char *pen, off_t sz)
static char *pstack[MAX_STACK];
static int pdepth = -1;
-static void
+static const char *
pushPen(const char *pen)
{
if (++pdepth == MAX_STACK)
errx(2, "%s: stack overflow.\n", __func__);
pstack[pdepth] = strdup(pen);
+
+ return pstack[pdepth];
}
static void
@@ -99,10 +100,11 @@ popPen(char *pen)
* Make a temporary directory to play in and chdir() to it, returning
* pathname of previous working directory.
*/
-char *
+const char *
make_playpen(char *pen, off_t sz)
{
char humbuf1[6], humbuf2[6];
+ char cwd[FILENAME_MAX];
if (!find_play_pen(pen, sz))
return NULL;
@@ -134,7 +136,7 @@ make_playpen(char *pen, off_t sz)
"with more space and\ntry the command again", __func__, pen);
}
- if (!getcwd(Previous, FILENAME_MAX)) {
+ if (!getcwd(cwd, FILENAME_MAX)) {
upchuck("getcwd");
return NULL;
}
@@ -144,34 +146,35 @@ make_playpen(char *pen, off_t sz)
errx(2, "%s: can't chdir to '%s'", __func__, pen);
}
- if (PenLocation[0])
- pushPen(PenLocation);
-
strcpy(PenLocation, pen);
- return Previous;
+ return pushPen(cwd);
}
/* Convenience routine for getting out of playpen */
-void
+int
leave_playpen()
{
+ static char left[FILENAME_MAX];
void (*oldsig)(int);
+ if (!PenLocation[0])
+ return 0;
+
/* Don't interrupt while we're cleaning up */
oldsig = signal(SIGINT, SIG_IGN);
- if (Previous[0]) {
- if (chdir(Previous) == FAIL) {
- cleanup(0);
- errx(2, "%s: can't chdir back to '%s'", __func__, Previous);
- }
- Previous[0] = '\0';
- }
- if (PenLocation[0]) {
- if (PenLocation[0] == '/' && vsystem("/bin/rm -rf %s", PenLocation))
- warnx("couldn't remove temporary dir '%s'", PenLocation);
- popPen(PenLocation);
+ strcpy(left, PenLocation);
+ popPen(PenLocation);
+
+ if (chdir(PenLocation) == FAIL) {
+ cleanup(0);
+ errx(2, "%s: can't chdir back to '%s'", __func__, PenLocation);
}
+
+ if (left[0] == '/' && vsystem("/bin/rm -rf %s", left))
+ warnx("couldn't remove temporary dir '%s'", left);
signal(SIGINT, oldsig);
+
+ return 1;
}
off_t
Modified: stable/7/usr.sbin/pkg_install/lib/plist.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/lib/plist.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/lib/plist.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -285,6 +285,10 @@ read_plist(Package *pkg, FILE *fp)
}
if (*cp == '\0') {
cp = NULL;
+ if (cmd == PLIST_PKGDEP) {
+ warnx("corrupted record (pkgdep line without argument), ignoring");
+ cmd = FAIL;
+ }
goto bottom;
}
if (cmd == PLIST_COMMENT && sscanf(cp, "PKG_FORMAT_REVISION:%d.%d\n",
Modified: stable/7/usr.sbin/pkg_install/lib/url.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/lib/url.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/lib/url.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -32,10 +32,11 @@ __FBSDID("$FreeBSD$");
* Try and fetch a file by URL, returning the directory name for where
* it's unpacked, if successful.
*/
-char *
+const char *
fileGetURL(const char *base, const char *spec, int keep_package)
{
- char *cp, *rp, *tmp;
+ const char *rp;
+ char *cp, *tmp;
char fname[FILENAME_MAX];
char pen[FILENAME_MAX];
char pkg[FILENAME_MAX];
@@ -105,7 +106,7 @@ fileGetURL(const char *base, const char
fetchDebug = (Verbose > 0);
if ((ftp = fetchGetURL(fname, Verbose ? "v" : NULL)) == NULL) {
- printf("Error: FTP Unable to get %s: %s\n",
+ printf("Error: Unable to get %s: %s\n",
fname, fetchLastErrString);
return NULL;
}
Modified: stable/7/usr.sbin/pkg_install/updating/Makefile
==============================================================================
--- stable/7/usr.sbin/pkg_install/updating/Makefile Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/updating/Makefile Fri Jan 22 23:17:07 2010 (r202841)
@@ -5,7 +5,6 @@ SRCS= main.c
CFLAGS+= -I${.CURDIR}/../lib
-WARNS?= 6
WFORMAT?= 1
DPADD= ${LIBINSTALL} ${LIBFETCH} ${LIBMD}
Modified: stable/7/usr.sbin/pkg_install/version/Makefile
==============================================================================
--- stable/7/usr.sbin/pkg_install/version/Makefile Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/version/Makefile Fri Jan 22 23:17:07 2010 (r202841)
@@ -5,7 +5,6 @@ SRCS= main.c perform.c
CFLAGS+= -I${.CURDIR}/../lib
-WARNS?= 6
WFORMAT?= 1
DPADD= ${LIBINSTALL} ${LIBFETCH} ${LIBMD}
Modified: stable/7/usr.sbin/pkg_install/version/main.c
==============================================================================
--- stable/7/usr.sbin/pkg_install/version/main.c Fri Jan 22 23:13:46 2010 (r202840)
+++ stable/7/usr.sbin/pkg_install/version/main.c Fri Jan 22 23:17:07 2010 (r202841)
@@ -127,7 +127,7 @@ main(int argc, char **argv)
}
static void
-usage()
+usage(void)
{
fprintf(stderr, "%s\n%s\n%s\n",
"usage: pkg_version [-hIoqv] [-l limchar] [-L limchar] [[-X] -s string] [-O origin] [index]",
More information about the svn-src-stable
mailing list