[pacman-dev] [PATCH 1/3] add -dd option

Florian Pritz bluewind at xssn.at
Fri Oct 1 11:30:04 EDT 2010


-dd ignores only the version of a dependency being checked, but not the
package itself.

Signed-off-by: Florian Pritz <bluewind at xssn.at>
---
 doc/pacman.8.txt    |    1 +
 lib/libalpm/alpm.h  |    2 +-
 lib/libalpm/deps.c  |    2 +-
 src/pacman/pacman.c |    9 +++++++--
 4 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt
index de1f51f..80bdd0f 100644
--- a/doc/pacman.8.txt
+++ b/doc/pacman.8.txt
@@ -126,6 +126,7 @@ Options
 	Skips all dependency checks. Normally, pacman will always check a
 	package's dependency fields to ensure that all dependencies are
 	installed and there are no package conflicts in the system.
+	Specify this option two times to skip only the version checking.
 
 *-f, \--force*::
 	Bypass file conflict checks and overwrite conflicting files. If the
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 0c01f21..a87e1f8 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -272,7 +272,7 @@ typedef enum _pmtransflag_t {
 	PM_TRANS_FLAG_NODEPS = 1,
 	PM_TRANS_FLAG_FORCE = (1 << 1),
 	PM_TRANS_FLAG_NOSAVE = (1 << 2),
-	/* (1 << 3) flag can go here */
+	PM_TRANS_FLAG_NODEPVERSION = (1 << 3),
 	PM_TRANS_FLAG_CASCADE = (1 << 4),
 	PM_TRANS_FLAG_RECURSE = (1 << 5),
 	PM_TRANS_FLAG_DBONLY = (1 << 6),
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index fd893a6..2124956 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -315,7 +315,7 @@ static int dep_vercmp(const char *version1, pmdepmod_t mod,
 {
 	int equal = 0;
 
-	if(mod == PM_DEP_MOD_ANY) {
+	if(mod == PM_DEP_MOD_ANY || handle->trans->flags & PM_TRANS_FLAG_NODEPVERSION) {
 		equal = 1;
 	} else {
 		int cmp = alpm_pkg_vercmp(version1, version2);
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 049bc40..612c4b3 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -524,8 +524,13 @@ static int parseargs(int argc, char *argv[])
 				config->op_q_changelog = 1;
 				break;
 			case 'd':
-				config->op_q_deps = 1;
-				config->flags |= PM_TRANS_FLAG_NODEPS;
+				(config->op_q_deps)++;
+				if(config->op_q_deps == 1) {
+					config->flags |= PM_TRANS_FLAG_NODEPS;
+				} else {
+					config->flags ^= PM_TRANS_FLAG_NODEPS;
+					config->flags |= PM_TRANS_FLAG_NODEPVERSION;
+				}
 				break;
 			case 'e':
 				config->op_q_explicit = 1;
-- 
1.7.3.1


More information about the pacman-dev mailing list