[pacman-dev] [PATCH 1/7] pactest: Rename epoch pactests
Signed-off-by: Dan McGee <dan@archlinux.org> --- test/pacman/tests/{sync140.py => epoch001.py} | 0 test/pacman/tests/{sync141.py => epoch002.py} | 0 test/pacman/tests/{sync142.py => epoch003.py} | 0 test/pacman/tests/{sync143.py => epoch004.py} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename test/pacman/tests/{sync140.py => epoch001.py} (100%) rename test/pacman/tests/{sync141.py => epoch002.py} (100%) rename test/pacman/tests/{sync142.py => epoch003.py} (100%) rename test/pacman/tests/{sync143.py => epoch004.py} (100%) diff --git a/test/pacman/tests/sync140.py b/test/pacman/tests/epoch001.py similarity index 100% rename from test/pacman/tests/sync140.py rename to test/pacman/tests/epoch001.py diff --git a/test/pacman/tests/sync141.py b/test/pacman/tests/epoch002.py similarity index 100% rename from test/pacman/tests/sync141.py rename to test/pacman/tests/epoch002.py diff --git a/test/pacman/tests/sync142.py b/test/pacman/tests/epoch003.py similarity index 100% rename from test/pacman/tests/sync142.py rename to test/pacman/tests/epoch003.py diff --git a/test/pacman/tests/sync143.py b/test/pacman/tests/epoch004.py similarity index 100% rename from test/pacman/tests/sync143.py rename to test/pacman/tests/epoch004.py -- 1.7.3.5
Signed-off-by: Dan McGee <dan@archlinux.org> --- test/pacman/tests/epoch001.py | 1 + test/pacman/tests/epoch002.py | 1 + test/pacman/tests/epoch003.py | 1 + test/pacman/tests/epoch004.py | 1 + test/pacman/tests/epoch010.py | 14 ++++++++++++++ test/pacman/tests/epoch011.py | 15 +++++++++++++++ test/pacman/tests/epoch012.py | 15 +++++++++++++++ 7 files changed, 48 insertions(+), 0 deletions(-) create mode 100644 test/pacman/tests/epoch010.py create mode 100644 test/pacman/tests/epoch011.py create mode 100644 test/pacman/tests/epoch012.py diff --git a/test/pacman/tests/epoch001.py b/test/pacman/tests/epoch001.py index b7ec9fc..e1d3114 100644 --- a/test/pacman/tests/epoch001.py +++ b/test/pacman/tests/epoch001.py @@ -11,3 +11,4 @@ self.addrule("PACMAN_RETCODE=0") self.addrule("PKG_VERSION=dummy|1.0-1") +self.addrule("PKG_EPOCH=dummy|1") diff --git a/test/pacman/tests/epoch002.py b/test/pacman/tests/epoch002.py index dac81f7..9e8a048 100644 --- a/test/pacman/tests/epoch002.py +++ b/test/pacman/tests/epoch002.py @@ -11,3 +11,4 @@ self.addrule("PACMAN_RETCODE=0") self.addrule("PKG_VERSION=dummy|1.0-1") +self.addrule("PKG_EPOCH=dummy|0") diff --git a/test/pacman/tests/epoch003.py b/test/pacman/tests/epoch003.py index 726ef30..17ca9bf 100644 --- a/test/pacman/tests/epoch003.py +++ b/test/pacman/tests/epoch003.py @@ -12,3 +12,4 @@ self.addrule("PACMAN_RETCODE=0") self.addrule("PKG_VERSION=dummy|1.4-1") +self.addrule("PKG_EPOCH=dummy|2") diff --git a/test/pacman/tests/epoch004.py b/test/pacman/tests/epoch004.py index 2ee940a..ad3e995 100644 --- a/test/pacman/tests/epoch004.py +++ b/test/pacman/tests/epoch004.py @@ -16,3 +16,4 @@ self.addrule("PKG_VERSION=dummy|2.0-1") self.addrule("FILE_EXIST=bin/dummynew") self.addrule("!FILE_EXIST=bin/dummyold") +self.addrule("PKG_EPOCH=dummy|2") diff --git a/test/pacman/tests/epoch010.py b/test/pacman/tests/epoch010.py new file mode 100644 index 0000000..3277597 --- /dev/null +++ b/test/pacman/tests/epoch010.py @@ -0,0 +1,14 @@ +self.description = "usbutils case study: force in new package" + +sp = pmpkg("usbutils", "001-1") +sp.force = True +self.addpkg2db("sync", sp) + +lp = pmpkg("usbutils", "0.91-4") +self.addpkg2db("local", lp) + +self.args = "-Su" + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_VERSION=usbutils|001-1") +self.addrule("PKG_EPOCH=usbutils|1") diff --git a/test/pacman/tests/epoch011.py b/test/pacman/tests/epoch011.py new file mode 100644 index 0000000..2c064aa --- /dev/null +++ b/test/pacman/tests/epoch011.py @@ -0,0 +1,15 @@ +self.description = "usbutils case study: force stays, epoch now in local db" + +sp = pmpkg("usbutils", "002-1") +sp.force = True +self.addpkg2db("sync", sp) + +lp = pmpkg("usbutils", "001-1") +lp.epoch = 1 +self.addpkg2db("local", lp) + +self.args = "-Su" + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_VERSION=usbutils|002-1") +self.addrule("PKG_EPOCH=usbutils|1") diff --git a/test/pacman/tests/epoch012.py b/test/pacman/tests/epoch012.py new file mode 100644 index 0000000..e0c7314 --- /dev/null +++ b/test/pacman/tests/epoch012.py @@ -0,0 +1,15 @@ +self.description = "usbutils case study: maintainer screws up and removes force" + +sp = pmpkg("usbutils", "003-1") +self.addpkg2db("sync", sp) + +lp = pmpkg("usbutils", "002-1") +lp.epoch = 1 +self.addpkg2db("local", lp) + +self.args = "-Su" + +self.addrule("PACMAN_RETCODE=0") +# remember, this is how we have to handle this- 003 will not be installed +self.addrule("PKG_VERSION=usbutils|002-1") +self.addrule("PKG_EPOCH=usbutils|1") -- 1.7.3.5
Adapting from RPM, follow the [epoch:]version[-release] syntax. We can also borrow some of their parsing code for our purposes (thanks!). Add some new tests to our vercmp shell script tester for epoch comparisons, and then make the code work with these newfangled epoch specifiers. Signed-off-by: Dan McGee <dan@archlinux.org> --- lib/libalpm/version.c | 157 +++++++++++++++++++++++++++++++++++------------ src/util/vercmp.c | 4 +- test/util/vercmptest.sh | 19 ++++++ 3 files changed, 138 insertions(+), 42 deletions(-) diff --git a/lib/libalpm/version.c b/lib/libalpm/version.c index 85cc2f5..eba6621 100644 --- a/lib/libalpm/version.c +++ b/lib/libalpm/version.c @@ -23,23 +23,66 @@ /* libalpm */ #include "util.h" -/** Compare two version strings and determine which one is 'newer'. - * Returns a value comparable to the way strcmp works. Returns 1 - * if a is newer than b, 0 if a and b are the same version, or -1 - * if b is newer than a. - * - * This function has been adopted from the rpmvercmp function located - * at lib/rpmvercmp.c, and was most recently updated against rpm - * version 4.4.2.3. Small modifications have been made to make it more - * consistent with the libalpm coding style. - * - * Keep in mind that the pkgrel is only compared if it is available - * on both versions handed to this function. For example, comparing - * 1.5-1 and 1.5 will yield 0; comparing 1.5-1 and 1.5-2 will yield - * -1 as expected. This is mainly for supporting versioned dependencies - * that do not include the pkgrel. +/** + * Some functions in this file have been adopted from the rpm source, notably + * 'rpmvercmp' located at lib/rpmvercmp.c and 'parseEVR' located at + * lib/rpmds.c. It was most recently updated against rpm version 4.8.1. Small + * modifications have been made to make it more consistent with the libalpm + * coding style. */ -int SYMEXPORT alpm_pkg_vercmp(const char *a, const char *b) + +/** + * Split EVR into epoch, version, and release components. + * @param evr [epoch:]version[-release] string + * @retval *ep pointer to epoch + * @retval *vp pointer to version + * @retval *rp pointer to release + */ +static void parseEVR(char *evr, const char **ep, const char **vp, + const char **rp) +{ + const char *epoch; + const char *version; + const char *release; + char *s, *se; + + s = evr; + /* s points to epoch terminator */ + while (*s && isdigit(*s)) s++; + /* se points to version terminator */ + se = strrchr(s, '-'); + + if(*s == ':') { + epoch = evr; + *s++ = '\0'; + version = s; + if(*epoch == '\0') { + epoch = "0"; + } + } else { + /* different from RPM- always assume 0 epoch */ + epoch = "0"; + version = evr; + } + if(se) { + *se++ = '\0'; + release = se; + } else { + release = NULL; + } + + if(ep) *ep = epoch; + if(vp) *vp = version; + if(rp) *rp = release; +} + +/** + * Compare alpha and numeric segments of two versions. + * return 1: a is newer than b + * 0: a and b are the same version + * -1: b is newer than a + */ +static int rpmvercmp(const char *a, const char *b) { char oldch1, oldch2; char *str1, *str2; @@ -49,13 +92,6 @@ int SYMEXPORT alpm_pkg_vercmp(const char *a, const char *b) int isnum; int ret = 0; - /* libalpm added code. ensure our strings are not null */ - if(!a) { - if(!b) return(0); - return(-1); - } - if(!b) return(1); - /* easy comparison to see if versions are identical */ if(strcmp(a, b) == 0) return(0); @@ -147,22 +183,6 @@ int SYMEXPORT alpm_pkg_vercmp(const char *a, const char *b) one = ptr1; *ptr2 = oldch2; two = ptr2; - - /* libalpm added code. check if version strings have hit the pkgrel - * portion. depending on which strings have hit, take correct action. - * this is all based on the premise that we only have one dash in - * the version string, and it separates pkgver from pkgrel. */ - if(*ptr1 == '-' && *ptr2 == '-') { - /* no-op, continue comparing since we are equivalent throughout */ - } else if(*ptr1 == '-') { - /* ptr1 has hit the pkgrel and ptr2 has not. continue version - * comparison after stripping the pkgrel from ptr1. */ - *ptr1 = '\0'; - } else if(*ptr2 == '-') { - /* ptr2 has hit the pkgrel and ptr1 has not. continue version - * comparison after stripping the pkgrel from ptr2. */ - *ptr2 = '\0'; - } } /* this catches the case where all numeric and alpha segments have */ @@ -179,7 +199,7 @@ int SYMEXPORT alpm_pkg_vercmp(const char *a, const char *b) * - if one is an alpha, two is newer. * - otherwise one is newer. * */ - if ( ( !*one && !isalpha((int)*two) ) + if ( (!*one && !isalpha((int)*two)) || isalpha((int)*one) ) { ret = -1; } else { @@ -192,4 +212,61 @@ cleanup: return(ret); } +/** Compare two version strings and determine which one is 'newer'. + * Returns a value comparable to the way strcmp works. Returns 1 + * if a is newer than b, 0 if a and b are the same version, or -1 + * if b is newer than a. + * + * Different epoch values for version strings will override any further + * comparison. If no epoch is provided, 0 is assumed. + * + * Keep in mind that the pkgrel is only compared if it is available + * on both versions handed to this function. For example, comparing + * 1.5-1 and 1.5 will yield 0; comparing 1.5-1 and 1.5-2 will yield + * -1 as expected. This is mainly for supporting versioned dependencies + * that do not include the pkgrel. + */ +int SYMEXPORT alpm_pkg_vercmp(const char *a, const char *b) +{ + char *full1, *full2; + const char *epoch1, *ver1, *rel1; + const char *epoch2, *ver2, *rel2; + int ret; + + /* ensure our strings are not null */ + if(!a && !b) { + return(0); + } else if(!a) { + return(-1); + } else if(!b) { + return(1); + } + /* another quick shortcut- if full version specs are equal */ + if(strcmp(a, b) == 0) { + return(0); + } + + /* Parse both versions into [epoch:]version[-release] triplets. We probably + * don't need epoch and release to support all the same magic, but it is + * easier to just run it all through the same code. */ + full1 = strdup(a); + full2 = strdup(b); + + /* parseEVR modifies passed in version, so have to dupe it first */ + parseEVR(full1, &epoch1, &ver1, &rel1); + parseEVR(full2, &epoch2, &ver2, &rel2); + + ret = rpmvercmp(epoch1, epoch2); + if(ret == 0) { + ret = rpmvercmp(ver1, ver2); + if(ret == 0 && rel1 && rel2) { + ret = rpmvercmp(rel1, rel2); + } + } + + free(full1); + free(full2); + return(ret); +} + /* vim: set ts=2 sw=2 noet: */ diff --git a/src/util/vercmp.c b/src/util/vercmp.c index a1da23c..adb5a42 100644 --- a/src/util/vercmp.c +++ b/src/util/vercmp.c @@ -24,8 +24,8 @@ #define BASENAME "vercmp" -/* forward declaration, comes from vercmp.o in libalpm source that is linked in - * directly so we don't have any library deps */ +/* forward declaration, comes from version.o in libalpm source that is linked + * in directly so we don't have any library deps */ int alpm_pkg_vercmp(const char *a, const char *b); static void usage(void) diff --git a/test/util/vercmptest.sh b/test/util/vercmptest.sh index fca0657..a9ed3b2 100755 --- a/test/util/vercmptest.sh +++ b/test/util/vercmptest.sh @@ -118,6 +118,25 @@ runtest 1.5.1 1.5.b 1 runtest 1.5.b-1 1.5.b 0 runtest 1.5-1 1.5.b -1 +# epoch included version comparisons +runtest 0:1.0 0:1.0 0 +runtest 0:1.0 0:1.1 -1 +runtest 1:1.0 0:1.0 1 +runtest 1:1.0 0:1.1 1 +runtest 1:1.0 2:1.1 -1 + +# epoch + sometimes present pkgrel +runtest 1:1.0 0:1.0-1 1 +runtest 1:1.0-1 0:1.1-1 1 + +# epoch included on one version +runtest 0:1.0 1.0 0 +runtest 0:1.0 1.1 -1 +runtest 0:1.1 1.0 1 +runtest 1:1.0 1.0 1 +runtest 1:1.0 1.1 1 +runtest 1:1.1 1.1 1 + #END TESTS echo -- 1.7.3.5
Instead, go the same route we have always taken with version-release in libalpm and treat it all as one piece of information. Makepkg is the only script that knows about epoch as a distinct value; from there on out we will parse out the components as necessary. This makes the code a lot simpler as far as epoch handling goes. The downside here is that we are tossing some compatibility to the wind; packages using force will have to be rebuilt with an incremented epoch to keep their special status. Signed-off-by: Dan McGee <dan@archlinux.org> --- contrib/bacman.in | 6 ------ doc/PKGBUILD.5.txt | 2 +- lib/libalpm/alpm.h | 1 - lib/libalpm/be_local.c | 16 ---------------- lib/libalpm/be_package.c | 7 ------- lib/libalpm/be_sync.c | 9 --------- lib/libalpm/package.c | 20 -------------------- lib/libalpm/package.h | 2 -- scripts/makepkg.sh.in | 7 +++++-- scripts/repo-add.sh.in | 8 +------- test/pacman/pmdb.py | 14 -------------- test/pacman/pmpkg.py | 6 ------ test/pacman/pmrule.py | 3 --- test/pacman/tests/epoch001.py | 6 ++---- test/pacman/tests/epoch002.py | 4 +--- test/pacman/tests/epoch003.py | 9 +++------ test/pacman/tests/epoch004.py | 9 +++------ test/pacman/tests/epoch010.py | 6 ++---- test/pacman/tests/epoch011.py | 9 +++------ test/pacman/tests/epoch012.py | 6 ++---- test/pacman/tests/sync136.py | 5 ++--- test/pacman/tests/sync137.py | 3 +-- 22 files changed, 26 insertions(+), 132 deletions(-) diff --git a/contrib/bacman.in b/contrib/bacman.in index b4e3b4b..bd54518 100755 --- a/contrib/bacman.in +++ b/contrib/bacman.in @@ -220,12 +220,6 @@ while read i; do %REPLACES%) echo "replaces = $i" >> .PKGINFO ;; - %EPOCH%) - echo "epoch = $i" >> .PKGINFO - ;; - %FORCE%) - echo "force = true" >> .PKGINFO - ;; # files %BACKUP%) diff --git a/doc/PKGBUILD.5.txt b/doc/PKGBUILD.5.txt index e6c4a1f..c0fa594 100644 --- a/doc/PKGBUILD.5.txt +++ b/doc/PKGBUILD.5.txt @@ -45,7 +45,7 @@ similar to `$_basekernver`. *pkgver*:: The version of the software as released from the author (e.g. '2.7.1'). - The variable is not allowed to contain hyphens. + The variable is not allowed to contain colons or hyphens. *pkgrel*:: This is the release number specific to the Arch Linux release. This diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index 7c4cd48..a540bc4 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -238,7 +238,6 @@ size_t alpm_pkg_changelog_read(void *ptr, size_t size, /*int alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp);*/ int alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp); int alpm_pkg_has_scriptlet(pmpkg_t *pkg); -int alpm_pkg_get_epoch(pmpkg_t *pkg); off_t alpm_pkg_download_size(pmpkg_t *newpkg); alpm_list_t *alpm_pkg_unused_deltas(pmpkg_t *pkg); diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c index 5471fee..ea59cec 100644 --- a/lib/libalpm/be_local.c +++ b/lib/libalpm/be_local.c @@ -156,12 +156,6 @@ static alpm_list_t *_cache_get_groups(pmpkg_t *pkg) return pkg->groups; } -static int _cache_get_epoch(pmpkg_t *pkg) -{ - LAZY_LOAD(INFRQ_DESC, -1); - return pkg->epoch; -} - static int _cache_has_scriptlet(pmpkg_t *pkg) { ALPM_LOG_FUNC; @@ -318,7 +312,6 @@ static struct pkg_operations local_pkg_ops = { .get_size = _cache_get_size, .get_isize = _cache_get_isize, .get_reason = _cache_get_reason, - .get_epoch = _cache_get_epoch, .has_scriptlet = _cache_has_scriptlet, .get_licenses = _cache_get_licenses, .get_groups = _cache_get_groups, @@ -606,11 +599,6 @@ int _alpm_local_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq) STRDUP(linedup, _alpm_strtrim(line), goto error); info->replaces = alpm_list_add(info->replaces, linedup); } - } else if(strcmp(line, "%EPOCH%") == 0) { - if(fgets(line, sizeof(line), fp) == NULL) { - goto error; - } - info->epoch = atoi(_alpm_strtrim(line)); } else if(strcmp(line, "%DEPENDS%") == 0) { while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) { pmdepend_t *dep = _alpm_splitdep(_alpm_strtrim(line)); @@ -767,10 +755,6 @@ int _alpm_local_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq) } fprintf(fp, "\n"); } - if(info->epoch) { - fprintf(fp, "%%EPOCH%%\n" - "%d\n\n", info->epoch); - } if(info->url) { fprintf(fp, "%%URL%%\n" "%s\n\n", info->url); diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c index b69161b..c272bd4 100644 --- a/lib/libalpm/be_package.c +++ b/lib/libalpm/be_package.c @@ -184,13 +184,6 @@ static int parse_descfile(struct archive *a, pmpkg_t *newpkg) STRDUP(newpkg->version, ptr, RET_ERR(PM_ERR_MEMORY, -1)); } else if(strcmp(key, "pkgdesc") == 0) { STRDUP(newpkg->desc, ptr, RET_ERR(PM_ERR_MEMORY, -1)); - } else if(strcmp(key, "force") == 0) { - /* For backward compatibility, like in sync_db_read */ - if(!newpkg->epoch) { - newpkg->epoch = 1; - } - } else if(strcmp(key, "epoch") == 0) { - newpkg->epoch = atoi(ptr); } else if(strcmp(key, "group") == 0) { newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr)); } else if(strcmp(key, "url") == 0) { diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c index b11499c..d38a7da 100644 --- a/lib/libalpm/be_sync.c +++ b/lib/libalpm/be_sync.c @@ -333,15 +333,6 @@ static int sync_db_read(pmdb_t *db, struct archive *archive, struct archive_entr READ_AND_STORE(pkg->md5sum); } else if(strcmp(line, "%REPLACES%") == 0) { READ_AND_STORE_ALL(pkg->replaces); - } else if(strcmp(line, "%EPOCH%") == 0) { - READ_NEXT(line); - pkg->epoch = atoi(line); - } else if(strcmp(line, "%FORCE%") == 0) { - /* For backward compatibility, treat force as a non-zero epoch - * but only if we didn't already have a known epoch value. */ - if(!pkg->epoch) { - pkg->epoch = 1; - } } else if(strcmp(line, "%DEPENDS%") == 0) { /* Different than the rest because of the _alpm_splitdep call. */ while(1) { diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c index 241c41c..d4b3b9c 100644 --- a/lib/libalpm/package.c +++ b/lib/libalpm/package.c @@ -110,7 +110,6 @@ static const char *_pkg_get_arch(pmpkg_t *pkg) { return pkg->arch; } static off_t _pkg_get_size(pmpkg_t *pkg) { return pkg->size; } static off_t _pkg_get_isize(pmpkg_t *pkg) { return pkg->isize; } static pmpkgreason_t _pkg_get_reason(pmpkg_t *pkg) { return pkg->reason; } -static int _pkg_get_epoch(pmpkg_t *pkg) { return pkg->epoch; } static int _pkg_has_scriptlet(pmpkg_t *pkg) { return pkg->scriptlet; } static alpm_list_t *_pkg_get_licenses(pmpkg_t *pkg) { return pkg->licenses; } @@ -141,7 +140,6 @@ struct pkg_operations default_pkg_ops = { .get_size = _pkg_get_size, .get_isize = _pkg_get_isize, .get_reason = _pkg_get_reason, - .get_epoch = _pkg_get_epoch, .has_scriptlet = _pkg_has_scriptlet, .get_licenses = _pkg_get_licenses, .get_groups = _pkg_get_groups, @@ -223,11 +221,6 @@ pmpkgreason_t SYMEXPORT alpm_pkg_get_reason(pmpkg_t *pkg) return pkg->ops->get_reason(pkg); } -int SYMEXPORT alpm_pkg_get_epoch(pmpkg_t *pkg) -{ - return pkg->ops->get_epoch(pkg); -} - alpm_list_t SYMEXPORT *alpm_pkg_get_licenses(pmpkg_t *pkg) { return pkg->ops->get_licenses(pkg); @@ -427,7 +420,6 @@ pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg) newpkg->size = pkg->size; newpkg->isize = pkg->isize; newpkg->scriptlet = pkg->scriptlet; - newpkg->epoch = pkg->epoch; newpkg->reason = pkg->reason; newpkg->licenses = alpm_list_strdup(pkg->licenses); @@ -518,20 +510,8 @@ void _alpm_pkg_free_trans(pmpkg_t *pkg) /* Is spkg an upgrade for localpkg? */ int _alpm_pkg_compare_versions(pmpkg_t *spkg, pmpkg_t *localpkg) { - int spkg_epoch, localpkg_epoch; - ALPM_LOG_FUNC; - spkg_epoch = alpm_pkg_get_epoch(spkg); - localpkg_epoch = alpm_pkg_get_epoch(localpkg); - - if(spkg_epoch > localpkg_epoch) { - return(1); - } else if(spkg_epoch < localpkg_epoch) { - return(-1); - } - - /* equal epoch values, move on to version comparison */ return alpm_pkg_vercmp(alpm_pkg_get_version(spkg), alpm_pkg_get_version(localpkg)); } diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h index 52582d9..b161d5f 100644 --- a/lib/libalpm/package.h +++ b/lib/libalpm/package.h @@ -57,7 +57,6 @@ struct pkg_operations { off_t (*get_size) (pmpkg_t *); off_t (*get_isize) (pmpkg_t *); pmpkgreason_t (*get_reason) (pmpkg_t *); - int (*get_epoch) (pmpkg_t *); int (*has_scriptlet) (pmpkg_t *); alpm_list_t *(*get_licenses) (pmpkg_t *); @@ -107,7 +106,6 @@ struct __pmpkg_t { off_t download_size; int scriptlet; - int epoch; pmpkgreason_t reason; pmpkgfrom_t origin; diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index a2d9c83..c01ae0c 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -935,9 +935,12 @@ write_pkginfo() { echo "# $(LC_ALL=C date -u)" echo "pkgname = $1" (( SPLITPKG )) && echo pkgbase = $pkgbase - echo "pkgver = $pkgver-$pkgrel" + if [[ $epoch ]]; then + echo "pkgver = $epoch:$pkgver-$pkgrel" + else + echo "pkgver = $pkgver-$pkgrel" + fi echo "pkgdesc = $pkgdesc" - [[ $epoch ]] && echo "epoch = $epoch" echo "url = $url" echo "builddate = $builddate" echo "packager = $packager" diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in index 87c7834..2929c96 100644 --- a/scripts/repo-add.sh.in +++ b/scripts/repo-add.sh.in @@ -190,7 +190,7 @@ db_write_entry() { # blank out all variables local pkgfile="$1" - local pkgname pkgver pkgdesc epoch csize size md5sum url arch builddate packager force \ + local pkgname pkgver pkgdesc csize size md5sum url arch builddate packager \ _groups _licenses _replaces _depends _conflicts _provides _optdepends local OLDIFS="$IFS" @@ -274,12 +274,6 @@ db_write_entry() [[ -n $builddate ]] && echo -e "%BUILDDATE%\n$builddate\n" >>desc [[ -n $packager ]] && echo -e "%PACKAGER%\n$packager\n" >>desc write_list_entry "REPLACES" "$_replaces" "desc" - # remain backward-compatible for now; put a force entry in the database - if [[ -n $epoch ]]; then - echo -e "%EPOCH%\n#epoch\n" >>desc - echo -e "%FORCE%\n" >>desc - fi - [[ -n $force ]] && echo -e "%FORCE%\n" >>desc # create depends entry msg2 "$(gettext "Creating 'depends' db entry...")" diff --git a/test/pacman/pmdb.py b/test/pacman/pmdb.py index b4d0e2d..6329f23 100755 --- a/test/pacman/pmdb.py +++ b/test/pacman/pmdb.py @@ -156,11 +156,6 @@ def db_read(self, name): pkg.md5sum = fd.readline().strip("\n") elif line == "%REPLACES%": pkg.replaces = _getsection(fd) - elif line == "%EPOCH%": - pkg.epoch = int(fd.readline().strip("\n")) - elif line == "%FORCE%": - fd.readline() - pkg.force = True elif line == "%DEPENDS%": pkg.depends = _getsection(fd) elif line == "%OPTDEPENDS%": @@ -250,19 +245,10 @@ def db_write(self, pkg): data.append(_mksection("SIZE", pkg.size)) if pkg.reason: data.append(_mksection("REASON", pkg.reason)) - if pkg.epoch: - data.append(_mksection("EPOCH", pkg.epoch)) else: data.append(_mksection("FILENAME", pkg.filename())) if pkg.replaces: data.append(_mksection("REPLACES", pkg.replaces)) - if pkg.epoch: - data.append(_mksection("EPOCH", pkg.epoch)) - # for backward compatibility - if not pkg.force: - data.append(_mksection("FORCE", "")) - if pkg.force: - data.append(_mksection("FORCE", "")) if pkg.csize: data.append(_mksection("CSIZE", pkg.csize)) if pkg.md5sum: diff --git a/test/pacman/pmpkg.py b/test/pacman/pmpkg.py index 3aabea4..988f4c2 100755 --- a/test/pacman/pmpkg.py +++ b/test/pacman/pmpkg.py @@ -49,8 +49,6 @@ def __init__(self, name, version = "1.0-1"): self.reason = 0 self.md5sum = "" # sync only self.replaces = [] - self.force = False - self.epoch = 0 self.depends = [] self.optdepends = [] self.conflicts = [] @@ -132,10 +130,6 @@ def makepkg(self, path): data.append("builddate = %s" % self.builddate) data.append("packager = %s" % self.packager) data.append("size = %s" % self.size) - if self.force: - data.append("force = true") - if self.epoch: - data.append("epoch = %d" % self.epoch) if self.arch: data.append("arch = %s" % self.arch) for i in self.license: diff --git a/test/pacman/pmrule.py b/test/pacman/pmrule.py index bea8e4a..89ae3f4 100755 --- a/test/pacman/pmrule.py +++ b/test/pacman/pmrule.py @@ -78,9 +78,6 @@ def check(self, root, retcode, localdb, files): elif case == "VERSION": if value != newpkg.version: success = 0 - elif case == "EPOCH": - if int(value) != newpkg.epoch: - success = 0 elif case == "DESC": if value != newpkg.desc: success = 0 diff --git a/test/pacman/tests/epoch001.py b/test/pacman/tests/epoch001.py index e1d3114..ac6c41a 100644 --- a/test/pacman/tests/epoch001.py +++ b/test/pacman/tests/epoch001.py @@ -1,7 +1,6 @@ self.description = "Sysupgrade with a sync package having higher epoch" -sp = pmpkg("dummy", "1.0-1") -sp.epoch = 1 +sp = pmpkg("dummy", "1:1.0-1") self.addpkg2db("sync", sp) lp = pmpkg("dummy", "1.1-1") @@ -10,5 +9,4 @@ self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_VERSION=dummy|1.0-1") -self.addrule("PKG_EPOCH=dummy|1") +self.addrule("PKG_VERSION=dummy|1:1.0-1") diff --git a/test/pacman/tests/epoch002.py b/test/pacman/tests/epoch002.py index 9e8a048..8ca4afc 100644 --- a/test/pacman/tests/epoch002.py +++ b/test/pacman/tests/epoch002.py @@ -3,12 +3,10 @@ lp = pmpkg("dummy", "1.0-1") self.addpkg2db("local", lp) -sp = pmpkg("dummy", "1.0-2") -sp.epoch = 1 +sp = pmpkg("dummy", "1:1.0-2") self.addpkg2db("sync", sp) self.args = "-Su --ignore %s" % lp.name self.addrule("PACMAN_RETCODE=0") self.addrule("PKG_VERSION=dummy|1.0-1") -self.addrule("PKG_EPOCH=dummy|0") diff --git a/test/pacman/tests/epoch003.py b/test/pacman/tests/epoch003.py index 17ca9bf..ac395e3 100644 --- a/test/pacman/tests/epoch003.py +++ b/test/pacman/tests/epoch003.py @@ -1,15 +1,12 @@ self.description = "Sysupgrade with an epoch package overriding a force package" -sp = pmpkg("dummy", "1.4-1") -sp.epoch = 2 +sp = pmpkg("dummy", "2:1.4-1") self.addpkg2db("sync", sp) -lp = pmpkg("dummy", "2.0-1") -lp.force = True +lp = pmpkg("dummy", "1:2.0-1") self.addpkg2db("local", lp) self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_VERSION=dummy|1.4-1") -self.addrule("PKG_EPOCH=dummy|2") +self.addrule("PKG_VERSION=dummy|2:1.4-1") diff --git a/test/pacman/tests/epoch004.py b/test/pacman/tests/epoch004.py index ad3e995..74b00c2 100644 --- a/test/pacman/tests/epoch004.py +++ b/test/pacman/tests/epoch004.py @@ -1,19 +1,16 @@ self.description = "Sysupgrade with same version, different epochs" -sp = pmpkg("dummy", "2.0-1") +sp = pmpkg("dummy", "2:2.0-1") sp.files = ["bin/dummynew"] -sp.epoch = 2 self.addpkg2db("sync", sp) -lp = pmpkg("dummy", "2.0-1") +lp = pmpkg("dummy", "1:2.0-1") lp.files = ["bin/dummyold"] -lp.force = True self.addpkg2db("local", lp) self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_VERSION=dummy|2.0-1") +self.addrule("PKG_VERSION=dummy|2:2.0-1") self.addrule("FILE_EXIST=bin/dummynew") self.addrule("!FILE_EXIST=bin/dummyold") -self.addrule("PKG_EPOCH=dummy|2") diff --git a/test/pacman/tests/epoch010.py b/test/pacman/tests/epoch010.py index 3277597..03bba27 100644 --- a/test/pacman/tests/epoch010.py +++ b/test/pacman/tests/epoch010.py @@ -1,7 +1,6 @@ self.description = "usbutils case study: force in new package" -sp = pmpkg("usbutils", "001-1") -sp.force = True +sp = pmpkg("usbutils", "1:001-1") self.addpkg2db("sync", sp) lp = pmpkg("usbutils", "0.91-4") @@ -10,5 +9,4 @@ self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_VERSION=usbutils|001-1") -self.addrule("PKG_EPOCH=usbutils|1") +self.addrule("PKG_VERSION=usbutils|1:001-1") diff --git a/test/pacman/tests/epoch011.py b/test/pacman/tests/epoch011.py index 2c064aa..bc5ee61 100644 --- a/test/pacman/tests/epoch011.py +++ b/test/pacman/tests/epoch011.py @@ -1,15 +1,12 @@ self.description = "usbutils case study: force stays, epoch now in local db" -sp = pmpkg("usbutils", "002-1") -sp.force = True +sp = pmpkg("usbutils", "1:002-1") self.addpkg2db("sync", sp) -lp = pmpkg("usbutils", "001-1") -lp.epoch = 1 +lp = pmpkg("usbutils", "1:001-1") self.addpkg2db("local", lp) self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_VERSION=usbutils|002-1") -self.addrule("PKG_EPOCH=usbutils|1") +self.addrule("PKG_VERSION=usbutils|1:002-1") diff --git a/test/pacman/tests/epoch012.py b/test/pacman/tests/epoch012.py index e0c7314..2a7a7ac 100644 --- a/test/pacman/tests/epoch012.py +++ b/test/pacman/tests/epoch012.py @@ -3,13 +3,11 @@ sp = pmpkg("usbutils", "003-1") self.addpkg2db("sync", sp) -lp = pmpkg("usbutils", "002-1") -lp.epoch = 1 +lp = pmpkg("usbutils", "1:002-1") self.addpkg2db("local", lp) self.args = "-Su" self.addrule("PACMAN_RETCODE=0") # remember, this is how we have to handle this- 003 will not be installed -self.addrule("PKG_VERSION=usbutils|002-1") -self.addrule("PKG_EPOCH=usbutils|1") +self.addrule("PKG_VERSION=usbutils|1:002-1") diff --git a/test/pacman/tests/sync136.py b/test/pacman/tests/sync136.py index b3a6baf..b31aae2 100644 --- a/test/pacman/tests/sync136.py +++ b/test/pacman/tests/sync136.py @@ -1,7 +1,6 @@ self.description = "Sysupgrade with a sync package forcing a downgrade" -sp = pmpkg("dummy", "1.0-1") -sp.force = True +sp = pmpkg("dummy", "1:1.0-1") self.addpkg2db("sync", sp) @@ -12,4 +11,4 @@ self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_VERSION=dummy|1.0-1") +self.addrule("PKG_VERSION=dummy|1:1.0-1") diff --git a/test/pacman/tests/sync137.py b/test/pacman/tests/sync137.py index 000855c..d76ac49 100644 --- a/test/pacman/tests/sync137.py +++ b/test/pacman/tests/sync137.py @@ -4,8 +4,7 @@ self.addpkg2db("local", lp) -sp = pmpkg("dummy", "1.0-2") -sp.force = True +sp = pmpkg("dummy", "1:1.0-2") self.addpkg2db("sync", sp) self.args = "-Su --ignore %s" % lp.name -- 1.7.3.5
This makes things consistent with everywhere else we are incorporating the new optional epoch field. Add a helper function that forms the version string for you and use it in makepkg where I found 'pkgver.*-.*pkgrel'. This exposes a few shortcomings in a previous "Override pkgver" patch (2020e629) in the install package and check if built functions. Signed-off-by: Dan McGee <dan@archlinux.org> --- scripts/makepkg.sh.in | 69 ++++++++++++++++++++++++++++++++----------------- 1 files changed, 45 insertions(+), 24 deletions(-) diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index c01ae0c..b97ae0c 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -142,18 +142,19 @@ clean_up() { msg "$(gettext "Cleaning up...")" rm -rf "$pkgdir" "$srcdir" if [[ -n $pkgbase ]]; then + local fullver=$(get_full_version $epoch $pkgver $pkgrel) # Can't do this unless the BUILDSCRIPT has been sourced. if (( BUILDFUNC )); then - rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-build.log"* + rm -f "${pkgbase}-${fullver}-${CARCH}-build.log"* fi if (( CHECKFUNC )); then - rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-check.log"* + rm -f "${pkgbase}-${fullver}-${CARCH}-check.log"* fi if (( PKGFUNC )); then - rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-package.log"* + rm -f "${pkgbase}-${fullver}-${CARCH}-package.log"* elif (( SPLITPKG )); then for pkg in ${pkgname[@]}; do - rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-package_${pkg}.log"* + rm -f "${pkgbase}-${fullver}-${CARCH}-package_${pkg}.log"* done fi @@ -225,6 +226,19 @@ get_url() { } ## +# usage : get_full_version( $epoch, $pkgver, $pkgrel ) +# return : full version spec, including epoch (if necessary), pkgver, pkgrel +## +get_full_version() { + if [[ $1 -eq 0 ]]; then + # zero epoch case, don't include it in version + echo $2-$3 + else + echo $1:$2-$3 + fi +} + +## # Checks to see if options are present in makepkg.conf or PKGBUILD; # PKGBUILD options always take precedence. # @@ -762,7 +776,8 @@ run_function() { local ret=0 local restoretrap if (( LOGGING )); then - local BUILDLOG="${startdir}/${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-$pkgfunc.log" + local fullver=$(get_full_version $epoch $pkgver $pkgrel) + local BUILDLOG="${startdir}/${pkgbase}-${fullver}-${CARCH}-$pkgfunc.log" if [[ -f $BUILDLOG ]]; then local i=1 while true; do @@ -935,11 +950,7 @@ write_pkginfo() { echo "# $(LC_ALL=C date -u)" echo "pkgname = $1" (( SPLITPKG )) && echo pkgbase = $pkgbase - if [[ $epoch ]]; then - echo "pkgver = $epoch:$pkgver-$pkgrel" - else - echo "pkgver = $pkgver-$pkgrel" - fi + echo "pkgver = $(get_full_version $epoch $pkgver $pkgrel)" echo "pkgdesc = $pkgdesc" echo "url = $url" echo "builddate = $builddate" @@ -1052,7 +1063,8 @@ create_package() { "$PKGEXT" ; EXT=$PKGEXT ;; esac - local pkg_file="$PKGDEST/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${PKGEXT}" + local fullver=$(get_full_version $epoch $pkgver $pkgrel) + local pkg_file="$PKGDEST/${nameofpkg}-${fullver}-${PKGARCH}${PKGEXT}" local ret=0 # when fileglobbing, we want * in an empty directory to expand to @@ -1147,7 +1159,8 @@ create_srcpackage() { "$SRCEXT" ;; esac - local pkg_file="$SRCPKGDEST/${pkgbase}-${pkgver}-${pkgrel}${SRCEXT}" + local fullver=$(get_full_version $epoch $pkgver $pkgrel) + local pkg_file="$SRCPKGDEST/${pkgbase}-${fullver}${SRCEXT}" # tar it up msg2 "$(gettext "Compressing source package...")" @@ -1179,12 +1192,14 @@ install_package() { msg "$(gettext "Installing %s package group with %s -U...")" "$pkgbase" "$PACMAN" fi - local pkg pkglist + local fullver pkg pkglist for pkg in ${pkgname[@]}; do - if [[ -f $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT} ]]; then - pkglist+=" $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" + # TODO: this wasn't properly fixed in commit 2020e629 + fullver=$(get_full_version $epoch $pkgver $pkgrel) + if [[ -f $PKGDEST/${pkg}-${fullver}-${CARCH}${PKGEXT} ]]; then + pkglist+=" $PKGDEST/${pkg}-${fullver}-${CARCH}${PKGEXT}" else - pkglist+=" $PKGDEST/${pkg}-${pkgver}-${pkgrel}-any${PKGEXT}" + pkglist+=" $PKGDEST/${pkg}-${fullver}-any${PKGEXT}" fi done @@ -1806,7 +1821,7 @@ if (( ! ( ASROOT || INFAKEROOT ) && ( DEP_BIN || RMDEPS || INSTALL ) )); then fi fi -unset pkgname pkgbase pkgver pkgrel pkgdesc url license groups provides +unset pkgname pkgbase pkgver pkgrel epoch pkgdesc url license groups provides unset md5sums replaces depends conflicts backup source install changelog build unset makedepends optdepends options noextract @@ -1843,6 +1858,7 @@ if (( GENINTEG )); then fi pkgbase=${pkgbase:-${pkgname[0]}} +epoch=${epoch:-0} # check the PKGBUILD for some basic requirements check_sanity || exit 1 @@ -1880,8 +1896,9 @@ if [[ -n "${PKGLIST[@]}" ]]; then fi if (( ! SPLITPKG )); then - if [[ -f $PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT} \ - || -f $PKGDEST/${pkgname}-${pkgver}-${pkgrel}-any${PKGEXT} ]] \ + fullver=$(get_full_version $epoch $pkgver $pkgrel) + if [[ -f $PKGDEST/${pkgname}-${fullver}-${CARCH}${PKGEXT} \ + || -f $PKGDEST/${pkgname}-${fullver}-any${PKGEXT} ]] \ && ! (( FORCE || SOURCEONLY || NOBUILD )); then if (( INSTALL )); then warning "$(gettext "A package has already been built, installing existing package...")" @@ -1896,8 +1913,10 @@ else allpkgbuilt=1 somepkgbuilt=0 for pkg in ${pkgname[@]}; do - if [[ -f $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT} \ - || -f $PKGDEST/${pkg}-${pkgver}-${pkgrel}-any${PKGEXT} ]]; then + # TODO: this wasn't properly fixed in commit 2020e629 + fullver=$(get_full_version $epoch $pkgver $pkgrel) + if [[ -f $PKGDEST/${pkg}-${fullver}-${CARCH}${PKGEXT} \ + || -f $PKGDEST/${pkg}-${fullver}-any${PKGEXT} ]]; then somepkgbuilt=1 else allpkgbuilt=0 @@ -1949,11 +1968,12 @@ if (( INFAKEROOT )); then exit 0 # $E_OK fi -msg "$(gettext "Making package: %s")" "$pkgbase $pkgver-$pkgrel ($(date))" +fullver=$(get_full_version $epoch $pkgver $pkgrel) +msg "$(gettext "Making package: %s")" "$pkgbase $fullver ($(date))" # if we are creating a source-only package, go no further if (( SOURCEONLY )); then - if [[ -f $SRCPKGDEST/${pkgbase}-${pkgver}-${pkgrel}${SRCEXT} ]] \ + if [[ -f $SRCPKGDEST/${pkgbase}-${fullver}${SRCEXT} ]] \ && (( ! FORCE )); then error "$(gettext "A source package has already been built. (use -f to overwrite)")" exit 1 @@ -2085,7 +2105,8 @@ else fi fi -msg "$(gettext "Finished making: %s")" "$pkgbase $pkgver-$pkgrel ($(date))" +fullver=$(get_full_version $epoch $pkgver $pkgrel) +msg "$(gettext "Finished making: %s")" "$pkgbase $fullver ($(date))" install_package -- 1.7.3.5
On 21/01/11 10:33, Dan McGee wrote:
This makes things consistent with everywhere else we are incorporating the new optional epoch field. Add a helper function that forms the version string for you and use it in makepkg where I found 'pkgver.*-.*pkgrel'.
This exposes a few shortcomings in a previous "Override pkgver" patch (2020e629) in the install package and check if built functions.
Signed-off-by: Dan McGee<dan@archlinux.org>
Ack-by: Allan
--- scripts/makepkg.sh.in | 69 ++++++++++++++++++++++++++++++++----------------- 1 files changed, 45 insertions(+), 24 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index c01ae0c..b97ae0c 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -142,18 +142,19 @@ clean_up() { msg "$(gettext "Cleaning up...")" rm -rf "$pkgdir" "$srcdir" if [[ -n $pkgbase ]]; then + local fullver=$(get_full_version $epoch $pkgver $pkgrel) # Can't do this unless the BUILDSCRIPT has been sourced. if (( BUILDFUNC )); then - rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-build.log"* + rm -f "${pkgbase}-${fullver}-${CARCH}-build.log"* fi if (( CHECKFUNC )); then - rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-check.log"* + rm -f "${pkgbase}-${fullver}-${CARCH}-check.log"* fi if (( PKGFUNC )); then
You can add the TODO item regarding pkgver/pkgrel overrides here too. And where logs are created. Allan
This includes info on version comparison that is very similar to the stuff in the pacman manpage, but also a few vercmp examples, the return values, and other fun stuff. Also update the version comparison stuff in the pacman manpage. Signed-off-by: Dan McGee <dan@archlinux.org> --- doc/Makefile.am | 4 +++ doc/index.txt | 1 + doc/pacman.8.txt | 6 +++- doc/vercmp.8.txt | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 doc/vercmp.8.txt diff --git a/doc/Makefile.am b/doc/Makefile.am index 6405cf0..b708d3f 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -7,6 +7,7 @@ ASCIIDOC_MANS = \ pacman.8 \ makepkg.8 \ repo-add.8 \ + vercmp.8 \ PKGBUILD.5 \ makepkg.conf.5 \ pacman.conf.5 \ @@ -18,6 +19,7 @@ HTML_MANPAGES = \ pacman.8.html \ makepkg.8.html \ repo-add.8.html \ + vercmp.8.html \ PKGBUILD.5.html \ makepkg.conf.5.html \ pacman.conf.5.html \ @@ -38,6 +40,7 @@ EXTRA_DIST = \ pacman.8.txt \ makepkg.8.txt \ repo-add.8.txt \ + vercmp.8.txt \ PKGBUILD.5.txt \ PKGBUILD-example.txt \ makepkg.conf.5.txt \ @@ -129,6 +132,7 @@ $(HTML_OTHER): asciidoc.conf pacman.8 pacman.8.html: pacman.8.txt makepkg.8 makepkg.8.html: makepkg.8.txt repo-add.8 repo-add.8.html: repo-add.8.txt +vercmp.8 vercmp.8.html: vercmp.8.txt PKGBUILD.5 PKGBUILD.5.html: PKGBUILD.5.txt PKGBUILD-example.txt makepkg.conf.5 makepkg.conf.5.html: makepkg.conf.5.txt pacman.conf.5 pacman.conf.5.html: pacman.conf.5.txt diff --git a/doc/index.txt b/doc/index.txt index ef32841..afb2719 100644 --- a/doc/index.txt +++ b/doc/index.txt @@ -43,6 +43,7 @@ configuration files dealing with pacman. * linkman:pacman[8] * linkman:pacman.conf[5] * linkman:repo-add[8] +* linkman:vercmp[8] Changelog ~~~~~~~~~ diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt index 2b47a88..8f91e40 100644 --- a/doc/pacman.8.txt +++ b/doc/pacman.8.txt @@ -80,8 +80,10 @@ to determine which packages need upgrading. This behavior operates as follows: Numeric: 1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0 + -Additionally, packages can have an 'epoch' value defined that will override any -version comparison and force an upgrade. +Additionally, version strings can have an 'epoch' value defined that will +overrule any version comparison (unless the epoch values are equal). This is +specified in an `epoch:version-rel` format. For example, `2:1.0-1` is always +greater than `1:3.6-1`. *-T, \--deptest*:: Check dependencies; this is useful in scripts such as makepkg to check diff --git a/doc/vercmp.8.txt b/doc/vercmp.8.txt new file mode 100644 index 0000000..f2fc530 --- /dev/null +++ b/doc/vercmp.8.txt @@ -0,0 +1,71 @@ +///// +vim:set ts=4 sw=4 syntax=asciidoc noet: +///// +vercmp(8) +========= + +Name +---- +vercmp - version comparsion utility + + +Synopsis +-------- +'vercmp' <version1> <version2> + + +Description +----------- +'vercmp' is used to determine the relationship between two given version +numbers. It outputs values as follows: + +* < 0 : if ver1 < ver2 +* = 0 : if ver1 == ver2 +* > 0 : if ver1 > ver2 + +Version comparsion operates as follows: + + Alphanumeric: + 1.0a < 1.0alpha < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0 + Numeric: + 1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0 + +Additionally, version strings can have an 'epoch' value defined that will +overrule any version comparison (unless the epoch values are equal). This is +specified in an `epoch:version-rel` format. For example, `2:1.0-1` is always +greater than `1:3.6-1`. + + +Options +------- +*-h, \--help*:: + Display syntax for the given operation. If no operation was supplied + then the general syntax is shown. + +Examples +-------- + + $ vercmp 1 2 + -1 + + $ vercmp 2 1 + 1 + + $ vercmp 2.0-1 1.7-6 + 1 + + $ vercmp 2.0 2.0-13 + 0 + + $ vercmp 4.34 1:001 + -1 + +Configuration +------------- +There is none. + +See Also +-------- +linkman:pacman[8], linkman:makepkg[8], linkman:libalpm[3] + +include::footer.txt[] -- 1.7.3.5
On 21/01/11 10:33, Dan McGee wrote:
This includes info on version comparison that is very similar to the stuff in the pacman manpage, but also a few vercmp examples, the return values, and other fun stuff.
Also update the version comparison stuff in the pacman manpage.
Signed-off-by: Dan McGee<dan@archlinux.org>
Add this to doc/.gitignore and you get an Ack from me. Allan
Allan, I had no idea you were not listed here. I think you count as an active developer at the moment. Also, move Aaron to the past contributors section. Signed-off-by: Dan McGee <dan@archlinux.org> --- doc/footer.txt | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/doc/footer.txt b/doc/footer.txt index 8290f3c..2ffb009 100644 --- a/doc/footer.txt +++ b/doc/footer.txt @@ -18,13 +18,14 @@ Authors Current maintainers: +* Allan McRae <allan@archlinux.org> * Dan McGee <dan@archlinux.org> * Xavier Chantry <shiningxc@gmail.com> -* Aaron Griffin <aaron@archlinux.org> Past contributors: * Judd Vinet <jvinet@zeroflux.org> * Aurelien Foret <aurelien@archlinux.org> +* Aaron Griffin <aaron@archlinux.org> See the 'AUTHORS' file for additional contributors. -- 1.7.3.5
participants (2)
-
Allan McRae
-
Dan McGee