summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/conflict.c14
-rw-r--r--pactest/tests/upgrade011.py16
2 files changed, 26 insertions, 4 deletions
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c
index c093705a..3442902c 100644
--- a/lib/libalpm/conflict.c
+++ b/lib/libalpm/conflict.c
@@ -251,10 +251,7 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)
alpm_list_t *ret = NULL;
alpm_list_t *pA = filesA, *pB = filesB;
- if(pB == NULL) {
- return(alpm_list_strdup(pA));
- }
-
+ /* if both filesA and filesB have entries, do this loop */
while(pA && pB) {
const char *strA = pA->data;
const char *strB = pB->data;
@@ -279,6 +276,15 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)
}
}
}
+ /* ensure we have completely emptied pA */
+ while(pA) {
+ const char *strA = pA->data;
+ /* skip directories */
+ if(strA[strlen(strA)-1] != '/') {
+ ret = alpm_list_add(ret, strdup(strA));
+ }
+ pA = pA->next;
+ }
return(ret);
}
diff --git a/pactest/tests/upgrade011.py b/pactest/tests/upgrade011.py
new file mode 100644
index 00000000..d8ed8734
--- /dev/null
+++ b/pactest/tests/upgrade011.py
@@ -0,0 +1,16 @@
+self.description = "Upgrade a package with a filesystem conflict"
+
+p = pmpkg("dummy", "2.0-1")
+p.files = ["bin/dummy", "usr/share/file"]
+self.addpkg(p)
+
+lp = pmpkg("dummy", "1.0-1")
+lp.files = ["bin/dummy"]
+self.addpkg2db("local", lp)
+
+self.filesystem = ["usr/share/file"]
+
+self.args = "-U %s" % p.filename()
+
+self.addrule("PACMAN_RETCODE=1")
+self.addrule("PKG_VERSION=dummy|1.0-1")