Added Obsoletes: tag
authormarc <devnull@localhost>
Tue, 16 Sep 1997 19:20:16 +0000 (19:20 +0000)
committermarc <devnull@localhost>
Tue, 16 Sep 1997 19:20:16 +0000 (19:20 +0000)
CVS patchset: 1827
CVS date: 1997/09/16 19:20:16

CHANGES
build/reqprov.c
build/spec.c
lib/rpmlib.h

diff --git a/CHANGES b/CHANGES
index f51b65c..c61f813 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,7 @@
 2.4.7 -> 2.4.8:
        - added noarch build compatibilities for ppc, m68k
        - fixed some minor typos (Florian La Roche)
+       - added Obsoletes: tag
 
 2.4.6 -> 2.4.7:
        - had some wrong month lengths in changelog date parsing
index 44e5332..30be1a3 100644 (file)
@@ -79,6 +79,9 @@ int addReqProv(struct PackageRec *p, int flags,
     } else if (flags & RPMSENSE_PREREQ) {
        rpmMessage(RPMMESS_DEBUG, "Adding prereq: %s\n", name);
        p->numPreReq++;
+    } else if (flags & RPMSENSE_OBSOLETES) {
+       rpmMessage(RPMMESS_DEBUG, "Adding obsoletes: %s\n", name);
+       p->numPreReq++;
     } else {   
        rpmMessage(RPMMESS_DEBUG, "Adding require: %s\n", name);
        p->numReq++;
@@ -370,7 +373,8 @@ int processReqProv(Header h, struct PackageRec *p)
                *namePtr++ = rd->name;
                *versionPtr++ = rd->version ? rd->version : "";
                *flagPtr++ = (rd->flags & RPMSENSE_SENSEMASK) |
-                   (rd->flags & RPMSENSE_PREREQ);
+                   (rd->flags & RPMSENSE_PREREQ) |
+                   (rd->flags & RPMSENSE_OBSOLETES);
            }
            rd = rd->next;
        }
index 6c81e11..7c97fd4 100644 (file)
@@ -310,6 +310,9 @@ static int parseRequiresConflicts(struct PackageRec *p, char *line,
          case RPMTAG_PREREQ:
            flags = RPMSENSE_PREREQ;
            break;
+         case RPMTAG_OBSOLETES:
+           flags = RPMSENSE_OBSOLETES;
+           break;
          default:
            flags = RPMSENSE_ANY;
            break;
@@ -319,6 +322,11 @@ static int parseRequiresConflicts(struct PackageRec *p, char *line,
                     "No file names in Conflicts: %s", req);
            return RPMERR_BADSPEC;
        }
+       if (flag == RPMTAG_OBSOLETES && req[0] == '/') {
+           rpmError(RPMERR_BADSPEC,
+                    "No file names in Obsoletes: %s", req);
+           return RPMERR_BADSPEC;
+       }
        if ((version = strtok(NULL, " ,\t\n"))) {
            rc = ReqComparisons;
            while (rc->token && strcmp(version, rc->token)) {
@@ -335,6 +343,11 @@ static int parseRequiresConflicts(struct PackageRec *p, char *line,
                             "No versions in PreReq: %s", req);
                    return RPMERR_BADSPEC;
                }
+               if (flag == RPMTAG_OBSOLETES) {
+                   rpmError(RPMERR_BADSPEC,
+                            "No versions in Obsoletes: %s", req);
+                   return RPMERR_BADSPEC;
+               }
                /* read a version */
                flags |= rc->flags;
                version = strtok(NULL, " ,\t\n");
@@ -869,6 +882,7 @@ struct preamble_line {
     {RPMTAG_REQUIREFLAGS,  0, "requires"},
     {RPMTAG_PREREQ,        0, "prereq"},
     {RPMTAG_CONFLICTFLAGS, 0, "conflicts"},
+    {RPMTAG_OBSOLETES,     0, "obsoletes"},
     {RPMTAG_DEFAULTPREFIX, 0, "prefix"},
     {RPMTAG_BUILDROOT,     0, "buildroot"},
     {RPMTAG_BUILDARCHS,    0, "buildarchitectures"},
@@ -1525,6 +1539,7 @@ Spec parseSpecAux(FILE *f, char *specfile, char *buildRootOverride,
                  case RPMTAG_REQUIREFLAGS:
                  case RPMTAG_CONFLICTFLAGS:
                  case RPMTAG_PREREQ:
+                 case RPMTAG_OBSOLETES:
                      if (parseRequiresConflicts(cur_package, s, tag)) {
                          return NULL;
                      }
index 81d6800..9c64ca5 100644 (file)
@@ -106,6 +106,7 @@ extern const struct headerSprintfExtension rpmHeaderFormats[];
 #define RPMTAG_PREUNPROG                1087
 #define RPMTAG_POSTUNPROG               1088
 #define RPMTAG_BUILDARCHS               1089
+#define RPMTAG_OBSOLETES                1090 /* internal */
 
 #define RPMTAG_EXTERNAL_TAG            1000000
 
@@ -157,6 +158,7 @@ extern const struct headerSprintfExtension rpmHeaderFormats[];
 #define RPMSENSE_PROVIDES        (1 << 4) /* only used internally by builds */
 #define RPMSENSE_CONFLICTS       (1 << 5) /* only used internally by builds */
 #define RPMSENSE_PREREQ          (1 << 6)
+#define RPMSENSE_OBSOLETES       (1 << 7)
 #define RPMSENSE_SENSEMASK       15       /* Mask to get senses, ie serial, */
                                           /* less, greater, equal.          */