diff options
author | Dan McGee <dan@archlinux.org> | 2011-08-11 01:00:47 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2011-08-11 11:19:04 -0500 |
commit | f3fa77bcf1d792971c314f8c0de255866e89f3f3 (patch) | |
tree | 101a954e5f50f1e4fdbcb036d498af9c25a173d9 /src | |
parent | 1f6afe6b0b3e1f222b5624e93af6e6272afea423 (diff) |
Add -S --recursive operation
This closely matches what we had before for -R --recursive. Basically,
when specifying a target (e.g., pacman), we can now recursively pull all
dependencies, regardless of version specifiers and whether they are
already satisfied in the local database. This could be used to update
pacman on a system with an old glibc, for example, as both pacman and
glibc would get pulled into the transaction.
This is most useful with --needed to prevent needless reinstalls as
described in the man page changes.
The end goal of this change is to wire it into SyncFirst and have it be
the default mode of operation there, but that belongs in a separate
changeset.
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/pacman/conf.h | 3 | ||||
-rw-r--r-- | src/pacman/pacman.c | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/pacman/conf.h b/src/pacman/conf.h index bce42ab5..33a87983 100644 --- a/src/pacman/conf.h +++ b/src/pacman/conf.h @@ -123,7 +123,8 @@ enum { OP_ASEXPLICIT, OP_ARCH, OP_PRINTFORMAT, - OP_GPGDIR + OP_GPGDIR, + OP_RECURSIVE }; /* clean method */ diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 21ccc966..585c8e08 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -165,6 +165,7 @@ static void usage(int op, const char * const myname) addlist(_(" -w, --downloadonly download packages but do not install/upgrade anything\n")); addlist(_(" -y, --refresh download fresh package databases from the server\n")); addlist(_(" --needed don't reinstall up to date packages\n")); + addlist(_(" --recursive reinstall all dependencies of target packages\n")); } else if(op == PM_OP_DATABASE) { printf("%s: %s {-D --database} <%s> <%s>\n", str_usg, myname, str_opt, str_pkg); printf("%s:\n", str_opt); @@ -506,6 +507,9 @@ static int parsearg_remove(int opt) case 'c': config->flags |= ALPM_TRANS_FLAG_CASCADE; break; case 'n': config->flags |= ALPM_TRANS_FLAG_NOSAVE; break; case 's': + case OP_RECURSIVE: + /* 's' is the legacy flag here, but since recursive is used in -S without + * a shortopt, we need to do funky tricks */ if(config->flags & ALPM_TRANS_FLAG_RECURSE) { config->flags |= ALPM_TRANS_FLAG_RECURSEALL; } else { @@ -544,6 +548,7 @@ static int parsearg_sync(int opt) return 0; switch(opt) { case OP_NEEDED: config->flags |= ALPM_TRANS_FLAG_NEEDED; break; + case OP_RECURSIVE: config->flags |= ALPM_TRANS_FLAG_RECURSE; break; case 'c': (config->op_s_clean)++; break; case 'g': (config->group)++; break; case 'i': (config->op_s_info)++; break; @@ -603,7 +608,6 @@ static int parseargs(int argc, char *argv[]) {"print", no_argument, 0, 'p'}, {"quiet", no_argument, 0, 'q'}, {"root", required_argument, 0, 'r'}, - {"recursive", no_argument, 0, 's'}, {"search", no_argument, 0, 's'}, {"unrequired", no_argument, 0, 't'}, {"upgrades", no_argument, 0, 'u'}, @@ -612,6 +616,7 @@ static int parseargs(int argc, char *argv[]) {"verbose", no_argument, 0, 'v'}, {"downloadonly", no_argument, 0, 'w'}, {"refresh", no_argument, 0, 'y'}, + {"noconfirm", no_argument, 0, OP_NOCONFIRM}, {"config", required_argument, 0, OP_CONFIG}, {"ignore", required_argument, 0, OP_IGNORE}, @@ -628,6 +633,7 @@ static int parseargs(int argc, char *argv[]) {"arch", required_argument, 0, OP_ARCH}, {"print-format", required_argument, 0, OP_PRINTFORMAT}, {"gpgdir", required_argument, 0, OP_GPGDIR}, + {"recursive", no_argument, 0, OP_RECURSIVE}, {0, 0, 0, 0} }; |