Skip to content

Commit

Permalink
Synch with main sources:
Browse files Browse the repository at this point in the history
Changes by hubertf and seb; these changes tested on NetBSD, Linux and Irix.

Modified Files:
	src/usr.sbin/pkg_install/add: perform.c pkg_add.1

Log Message:
Implement remaining TODO item in pkg upgrade (pkg_add -u):
* Upgrade step 1/4: Check if the new version is ok with all pkgs
* (from +REQUIRED_BY) that require this pkg

Inspired by bsd.pkg.mk's upgrade(?) target.

Modified Files:
	src/usr.sbin/pkg_install/admin: main.c
	src/usr.sbin/pkg_install/info: main.c perform.c

Log Message:
Consistently check findmatchingname() return value for error condition.
Among other this fixes 'pkg_info -e whateverpkg' exit status when
/var/db/pkg is missing: it is now 1 and not 0.

Modified Files:
	src/usr.sbin/pkg_install/lib: version.h

Log Message:
Bump to "20030325" after today's changes from seb and me
  • Loading branch information
jschauma committed Mar 29, 2003
1 parent 4422c0c commit 43f0484
Show file tree
Hide file tree
Showing 7 changed files with 126 additions and 32 deletions.
114 changes: 100 additions & 14 deletions pkgtools/pkg_install/files/add/perform.c
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
/* $NetBSD: perform.c,v 1.3 2003/01/14 15:18:32 jschauma Exp $ */
/* $NetBSD: perform.c,v 1.4 2003/03/29 18:41:56 jschauma Exp $ */

#if 0
#include <sys/cdefs.h>
#ifndef lint
#if 0
static const char *rcsid = "from FreeBSD Id: perform.c,v 1.44 1997/10/13 15:03:46 jkh Exp";
#else
__RCSID("$NetBSD: perform.c,v 1.3 2003/01/14 15:18:32 jschauma Exp $");
__RCSID("$NetBSD: perform.c,v 1.4 2003/03/29 18:41:56 jschauma Exp $");
#endif
#endif
#endif
Expand Down Expand Up @@ -330,18 +330,6 @@ pkg_do(const char *pkg)
(int)(s - PkgName) + 1, PkgName);
if (findmatchingname(dbdir, buf, note_whats_installed, installed) > 0) {
if (upgrade) {
/*
* Upgrade step 1/4: Check if the new version is ok with all pkgs
* that require this pkg
*/
/* TODO */

/*
* Upgrade step 2/4: Do the actual update by moving aside
* the +REQUIRED_BY file, deinstalling the old pkg, adding
* the new one and moving the +REQUIRED_BY file back
* into place (finished in step 3/4)
*/
snprintf(upgrade_from, sizeof(upgrade_from), "%s/%s/" REQUIRED_BY_FNAME,
dbdir, installed);
snprintf(upgrade_via, sizeof(upgrade_via), "%s/.%s." REQUIRED_BY_FNAME,
Expand All @@ -353,6 +341,104 @@ pkg_do(const char *pkg)
printf("Upgrading %s to %s.\n", installed, PkgName);

if (fexists(upgrade_from)) { /* Are there any dependencies? */
/*
* Upgrade step 1/4: Check if the new version is ok with all pkgs
* (from +REQUIRED_BY) that require this pkg
*/
FILE *rb; /* +REQUIRED_BY file */
char pkg2chk[FILENAME_MAX];

rb = fopen(upgrade_from, "r");
if (! rb) {
warnx("Cannot open '%s' for reading%s", upgrade_from,
Force ? " (proceeding anyways)" : "");
if (Force)
goto ignore_upgrade_depends_check;
else
goto bomb;
}
while (fgets(pkg2chk, sizeof(pkg2chk), rb)) {
package_t depPlist;
FILE *depf;
plist_t *depp;
char depC[FILENAME_MAX];

s = strrchr(pkg2chk, '\n');
if (s)
*s = '\0'; /* strip trailing '\n' */

/*
* step into pkg2chk, read it's +CONTENTS file and see if
* all @pkgdep lines agree with PkgName (using pmatch())
*/
snprintf(depC, sizeof(depC), "%s/%s/%s", dbdir, pkg2chk, CONTENTS_FNAME);
depf = fopen(depC , "r");
if (depf == NULL) {
warnx("Cannot check depends in '%s'%s", depC,
Force ? " (proceeding anyways)" : "!" );
if (Force)
goto ignore_upgrade_depends_check;
else
goto bomb;
}
read_plist(&depPlist, depf);
fclose(depf);

for (depp = depPlist.head; depp; depp = depp->next) {
char base_new[FILENAME_MAX];
char base_exist[FILENAME_MAX];
char *s2;

if (depp->type != PLIST_PKGDEP)
continue;

/* Prepare basename (no versions) of both pkgs,
* to see if we want to compare against that
* one at all.
*/
strcpy(base_new, PkgName);
s2 = strpbrk(base_new, "<>[]?*{");
if (s2)
*s2 = '\0';
else {
s2 = strrchr(base_new, '-');
if (s2)
*s2 = '\0';
}
strcpy(base_exist, depp->name);
s2 = strpbrk(base_exist, "<>[]?*{");
if (s2)
*s2 = '\0';
else {
s2 = strrchr(base_exist, '-');
if (s2)
*s2 = '\0';
}
if (strcmp(base_new, base_exist) == 0) {
/* Same pkg, so do the interesting compare */
if (pmatch(depp->name, PkgName)) {
if (Verbose)
printf("@pkgdep check: %s is ok for %s (in %s pkg)\n",
PkgName, depp->name, pkg2chk);
} else {
printf("Package %s requires %s, \n\tCannot perform upgrade to %s%s\n",
pkg2chk, depp->name, PkgName,
Force? " (proceeding anyways)" : "!");
if (! Force)
goto bomb;
}
}
}
}
fclose(rb);

ignore_upgrade_depends_check:
/*
* Upgrade step 2/4: Do the actual update by moving aside
* the +REQUIRED_BY file, deinstalling the old pkg, adding
* the new one and moving the +REQUIRED_BY file back
* into place (finished in step 3/4)
*/
if (Verbose)
printf("mv %s %s\n", upgrade_from, upgrade_via);
rc = rename(upgrade_from, upgrade_via);
Expand Down
8 changes: 5 additions & 3 deletions pkgtools/pkg_install/files/add/pkg_add.1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.\" $NetBSD: pkg_add.1,v 1.1.1.1 2002/12/20 18:13:57 schmonz Exp $
.\" $NetBSD: pkg_add.1,v 1.2 2003/03/29 18:41:56 jschauma Exp $
.\"
.\" FreeBSD install - a package for the installation and maintainance
.\" of non-core utilities.
Expand Down Expand Up @@ -271,9 +271,11 @@ option is not given.
If the
.Fl u
option is given, it's assumed the package should be upgraded instead.
This is prepared by moving an existing
Before doing so, all packages that depend on the pkg being upgraded
are checked if they also work with the new version. If that test is
successful, the upgrade is prepared by moving an existing
.Pa +REQUIRED_BY
file aside (if it exists), and by running
file aside (if it exists), and running
.Xr pkg_delete 1
on the installed package.
Installation then proceeds as if the package
Expand Down
6 changes: 3 additions & 3 deletions pkgtools/pkg_install/files/admin/main.c
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
/* $NetBSD: main.c,v 1.6 2003/03/16 19:44:09 jschauma Exp $ */
/* $NetBSD: main.c,v 1.7 2003/03/29 18:41:56 jschauma Exp $ */

#if 0
#include <sys/cdefs.h>
#ifndef lint
__RCSID("$NetBSD: main.c,v 1.6 2003/03/16 19:44:09 jschauma Exp $");
__RCSID("$NetBSD: main.c,v 1.7 2003/03/29 18:41:56 jschauma Exp $");
#endif
#endif

Expand Down Expand Up @@ -421,7 +421,7 @@ main(int argc, char *argv[])

while (*argv != NULL) {
if (ispkgpattern(*argv)) {
if (findmatchingname(_pkgdb_getPKGDB_DIR(), *argv, checkpattern_fn, NULL) == 0)
if (findmatchingname(_pkgdb_getPKGDB_DIR(), *argv, checkpattern_fn, NULL) <= 0)
errx(EXIT_FAILURE, "No matching pkg for %s.", *argv);
} else {
rc = chdir(*argv);
Expand Down
6 changes: 3 additions & 3 deletions pkgtools/pkg_install/files/info/main.c
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
/* $NetBSD: main.c,v 1.2 2003/01/06 04:34:16 jschauma Exp $ */
/* $NetBSD: main.c,v 1.3 2003/03/29 18:41:56 jschauma Exp $ */

#if 0
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char *rcsid = "from FreeBSD Id: main.c,v 1.14 1997/10/08 07:47:26 charnier Exp";
#else
__RCSID("$NetBSD: main.c,v 1.2 2003/01/06 04:34:16 jschauma Exp $");
__RCSID("$NetBSD: main.c,v 1.3 2003/03/29 18:41:56 jschauma Exp $");
#endif
#endif
#endif
Expand Down Expand Up @@ -253,7 +253,7 @@ main(int argc, char **argv)
errx(EXIT_FAILURE, "No matching pkg for %s.", *argv);
} else {
if (ispkgpattern(*argv)) {
if (findmatchingname(_pkgdb_getPKGDB_DIR(), *argv, add_to_list_fn, &pkgs) == 0)
if (findmatchingname(_pkgdb_getPKGDB_DIR(), *argv, add_to_list_fn, &pkgs) <= 0)
errx(EXIT_FAILURE, "No matching pkg for %s.", *argv);
} else {
lpp = alloc_lpkg(*argv);
Expand Down
14 changes: 9 additions & 5 deletions pkgtools/pkg_install/files/info/perform.c
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
/* $NetBSD: perform.c,v 1.6 2003/03/16 19:44:09 jschauma Exp $ */
/* $NetBSD: perform.c,v 1.7 2003/03/29 18:41:56 jschauma Exp $ */

#if 0
#include <sys/cdefs.h>
#ifndef lint
#if 0
static const char *rcsid = "from FreeBSD Id: perform.c,v 1.23 1997/10/13 15:03:53 jkh Exp";
#else
__RCSID("$NetBSD: perform.c,v 1.6 2003/03/16 19:44:09 jschauma Exp $");
__RCSID("$NetBSD: perform.c,v 1.7 2003/03/29 18:41:56 jschauma Exp $");
#endif
#endif
#endif
Expand Down Expand Up @@ -145,7 +145,7 @@ pkg_do(char *pkg)
char try[FILENAME_MAX];
snprintf(try, FILENAME_MAX, "%s-[0-9]*", pkg);
if (findmatchingname(_pkgdb_getPKGDB_DIR(), try,
add_to_list_fn, &pkgs) != 0) {
add_to_list_fn, &pkgs) > 0) {
return 0; /* we've just appended some names to the pkgs list,
* they will be processed after this package. */
}
Expand Down Expand Up @@ -293,7 +293,11 @@ CheckForPkg(char *pkgspec, char *dbdir)

if (strpbrk(pkgspec, "<>[]?*{")) {
/* expensive (pattern) match */
return !findmatchingname(dbdir, pkgspec, foundpkg, dbdir);
error = findmatchingname(dbdir, pkgspec, foundpkg, dbdir);
if (error == -1)
return 1;
else
return !error;
}
/* simple match */
(void) snprintf(buf, sizeof(buf), "%s/%s", dbdir, pkgspec);
Expand All @@ -306,7 +310,7 @@ CheckForPkg(char *pkgspec, char *dbdir)

char try[FILENAME_MAX];
snprintf(try, FILENAME_MAX, "%s-[0-9]*", pkgspec);
if (findmatchingname(dbdir, try, foundpkg, dbdir) != 0) {
if (findmatchingname(dbdir, try, foundpkg, dbdir) > 0) {
error = 0;
}
}
Expand Down
6 changes: 4 additions & 2 deletions pkgtools/pkg_install/files/lib/pkgdb.c
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
/* $NetBSD: pkgdb.c,v 1.8 2003/03/16 19:44:10 jschauma Exp $ */
/* $NetBSD: pkgdb.c,v 1.9 2003/03/29 18:41:57 jschauma Exp $ */

#if 0
#include <sys/cdefs.h>
#ifndef lint
__RCSID("$NetBSD: pkgdb.c,v 1.8 2003/03/16 19:44:10 jschauma Exp $");
__RCSID("$NetBSD: pkgdb.c,v 1.9 2003/03/29 18:41:57 jschauma Exp $");
#endif
#endif

Expand Down Expand Up @@ -183,6 +183,7 @@ pkgdb_retrieve(const char *key)
void
pkgdb_dump(void)
{
#if defined(HAVE_DBOPEN)
DBT key;
DBT val;
int type;
Expand All @@ -195,6 +196,7 @@ pkgdb_dump(void)
}
pkgdb_close();
}
#endif
}

/*
Expand Down
4 changes: 2 additions & 2 deletions pkgtools/pkg_install/files/lib/version.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $NetBSD: version.h,v 1.5 2003/03/16 19:44:10 jschauma Exp $ */
/* $NetBSD: version.h,v 1.6 2003/03/29 18:41:57 jschauma Exp $ */

/*
* Copyright (c) 2001 Thomas Klausner. All rights reserved.
Expand Down Expand Up @@ -33,6 +33,6 @@
#ifndef _INST_LIB_VERSION_H_
#define _INST_LIB_VERSION_H_

#define PKGTOOLS_VERSION "20030315"
#define PKGTOOLS_VERSION "20030325"

#endif /* _INST_LIB_VERSION_H_ */

0 comments on commit 43f0484

Please sign in to comment.