#include "stringbuf.h"
#include "misc.h"
#include "reqprov.h"
+#include "trigger.h"
#define LINE_BUF_SIZE 1024
#define FREE(x) { if (x) free(x); }
}
}
-static struct ReqComp {
- char *token;
- int flags;
-} ReqComparisons[] = {
+struct ReqComp ReqComparisons[] = {
{ "<=", REQUIRE_LESS | REQUIRE_EQUAL},
{ "<=S", REQUIRE_LESS | REQUIRE_EQUAL | REQUIRE_SERIAL},
{ "=<", REQUIRE_LESS | REQUIRE_EQUAL},
p->numReq = 0;
p->numProv = 0;
p->numConflict = 0;
+ p->trigger.alloced = 0;
+ p->trigger.used = 0;
+ p->trigger.triggerScripts = NULL;
+ p->trigger.trigger = NULL;
+ p->trigger.triggerCount = 0;
p->next = NULL;
return p;
FREE(p->icon);
FREE(p->fileFile);
free_reqprov(p->reqprov);
+ freeTriggers(p->trigger);
if (p->next) {
free_packagerec(p->next);
}
#define FILES_PART 10
#define CHANGELOG_PART 11
#define DESCRIPTION_PART 12
+#define TRIGGERON_PART 13
+#define TRIGGEROFF_PART 14
static struct part_rec {
int part;
{FILES_PART, 0, "%files"},
{CHANGELOG_PART, 0, "%changelog"},
{DESCRIPTION_PART, 0, "%description"},
+ {TRIGGERON_PART, 0, "%triggeron"},
+ {TRIGGEROFF_PART, 0, "%triggeroff"},
{0, 0, 0}
};
char buf[LINE_BUF_SIZE]; /* read buffer */
char buf2[LINE_BUF_SIZE];
char fileFile[LINE_BUF_SIZE];
+ char triggerArgs[LINE_BUF_SIZE];
char *line; /* "parsed" read buffer */
int x, serial, tag, cur_part, t1;
addEntry(spec->packages->header, RPMTAG_CHANGELOG, STRING_TYPE,
getStringBuf(sb), 1);
break;
+ case TRIGGERON_PART:
+ if (addTrigger(cur_package, TRIGGER_ON,
+ getStringBuf(sb), triggerArgs)) {
+ return NULL;
+ }
+ break;
+ case TRIGGEROFF_PART:
+ if (addTrigger(cur_package, TRIGGER_OFF,
+ getStringBuf(sb), triggerArgs)) {
+ return NULL;
+ }
+ break;
}
if (t1) {
addEntry(cur_package->header, t1,
}
message(MESS_DEBUG, "fileFile = %s\n",
- fileFile ? fileFile : "(null)");
+ fileFile[0] ? fileFile : "(null)");
+
+ /* If trigger, pull off the args */
+ if (tag == TRIGGERON_PART || tag == TRIGGEROFF_PART) {
+ s1 = strstr(s, "--");
+ if (s1) {
+ strcpy(triggerArgs, s1+2);
+ *s1 = '\0';
+ s = strtok(s, " \n\t");
+ } else {
+ strcpy(triggerArgs, s);
+ s = NULL;
+ }
+ }
/* Handle -n in part tags */
lookupopts = 0;
cur_package->fileFile = strdup(fileFile);
}
}
-
+
+ /* This line has no content -- it was just a control line */
continue;
}
case POSTUN_PART:
appendLineStringBuf(sb, line);
break;
+ case TRIGGERON_PART:
+ case TRIGGEROFF_PART:
+ appendLineStringBuf(sb, line);
+ break;
case FILES_PART:
s1 = line;
while (*s1 && (*s1 == ' ' || *s1 == '\t')) s1++;