aboutsummaryrefslogtreecommitdiffstats
path: root/main/apk-tools/0002-upgrade-reset-versioned-deps-in-world-when-doing-upg.patch
blob: 2e20152ddff224baed008a2e67e50fc7ad4acb5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
From 47bac8c29c9a3c3fbebfd20e907170f24f9d677c Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Tue, 11 May 2010 09:31:20 +0000
Subject: [PATCH 2/5] upgrade: reset versioned deps in world when doing upgrade -a

Doing "apk add file.apk" adds a versioned dependency to allow
downgrading, and sticky version. Most often this is to install
single packages from newer repository. So it would make sense
to reset them to non-versioned if doing:

 apk upgrade -a

fixes #346
---
 src/upgrade.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/upgrade.c b/src/upgrade.c
index f91e8cc..879e14c 100644
--- a/src/upgrade.c
+++ b/src/upgrade.c
@@ -41,10 +41,15 @@ static int upgrade_main(void *ctx, struct apk_database *db, int argc, char **arg
 		goto err;
 
 	for (i = 0; i < db->world->num; i++) {
-		r = apk_state_lock_dependency(state, &db->world->item[i]);
+		struct apk_dependency *dep = &db->world->item[i];
+		if (dep->version && (apk_flags & APK_PREFER_AVAILABLE)) {
+			dep->result_mask = APK_VERSION_EQUAL | APK_VERSION_LESS | APK_VERSION_GREATER;
+			dep->version = NULL;
+		}
+		r = apk_state_lock_dependency(state, dep);
 		if (r != 0) {
 			apk_error("Unable to upgrade '%s'",
-				  db->world->item[i].name->name);
+				  dep->name->name);
 			goto err;
 		}
 	}
-- 
1.7.1