Add scriptlet-specific disablers for %pretrans and %posttrans 03/168303/1 submit/tizen_base/20180330.050344
authorPanu Matilainen <pmatilai@redhat.com>
Wed, 10 Apr 2013 08:31:41 +0000 (11:31 +0300)
committerMikhail Kashkarov <m.kashkarov@partner.samsung.com>
Thu, 25 Jan 2018 12:09:09 +0000 (15:09 +0300)
- Previously %pretrans and %posttrans were tied to --nopre and --nopost
  disablers (since commit 0b2d7775c5e828652e45829f551352b93890bbc8)
  because back then, there was no room new disablers in rpmtransFlags
  bitfield. This is no longer the case as of rpm >= 4.9.x where
  a bunch of obsolete flags were axed, so we can now add specific
  --nopretrans and --noposttrans switches + corresponding flags.
- This is obviously a behavior change as --nopre and --nopost no
  longer affect %pretrans and %posttrans, but --noscripts behavior
  remains the same.

Change-Id: I7d8ebba44573f0a72a4eecfc8040af86e95409ce

doc/rpm.8
lib/poptI.c
lib/rpmts.h
lib/transaction.c
python/rpmmodule.c

index ee72665..0a757b3 100644 (file)
--- a/doc/rpm.8
+++ b/doc/rpm.8
@@ -281,6 +281,10 @@ packages would normally be reordered to satisfy dependencies.
 \fB--nopreun\fR
 .TP
 \fB--nopostun\fR
+.TP
+\fB--nopretrans\fR
+.TP
+\fB--noposttrans\fR
 Don't execute the scriptlet of the same name.
 The \fB--noscripts\fR option is equivalent to
 
@@ -288,12 +292,16 @@ The \fB--noscripts\fR option is equivalent to
 \fB--nopost\fR
 \fB--nopreun\fR
 \fB--nopostun\fR
+\fB--nopretrans\fR
+\fB--noposttrans\fR
 
 and turns off the execution of the corresponding
 \fB%pre\fR,
 \fB%post\fR,
-\fB%preun\fR, and
+\fB%preun\fR,
 \fB%postun\fR
+\fB%pretrans\fR, and
+\fB%posttrans\fR
 scriptlet(s).
 .TP
 \fB--notriggers\fR
index 8c1ff6e..051f0f5 100644 (file)
@@ -202,6 +202,12 @@ struct poptOption rpmInstallPoptTable[] = {
  { "nopostun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags,
        RPMTRANS_FLAG_NOPOSTUN,
        N_("do not execute %%postun scriptlet (if any)"), NULL },
+ { "nopretrans", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags,
+       RPMTRANS_FLAG_NOPRETRANS,
+       N_("do not execute %%pretrans scriptlet (if any)"), NULL },
+ { "noposttrans", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags,
+       RPMTRANS_FLAG_NOPOSTTRANS,
+       N_("do not execute %%posttrans scriptlet (if any)"), NULL },
 
  { "notriggers", '\0', POPT_BIT_SET, &rpmIArgs.transFlags, _noTransTriggers,
        N_("do not execute any scriptlet(s) triggered by this package"), NULL},
index 059f46d..7705044 100644 (file)
@@ -45,7 +45,8 @@ enum rpmtransFlags_e {
     RPMTRANS_FLAG_NOPREUN      = (1 << 21),    /*!< from --nopreun */
     RPMTRANS_FLAG_NOPOSTUN     = (1 << 22),    /*!< from --nopostun */
     RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23), /*!< from --notriggerpostun */
-    /* bits 24-25 unused */
+    RPMTRANS_FLAG_NOPRETRANS   = (1 << 24),    /*!< from --nopretrans */
+    RPMTRANS_FLAG_NOPOSTTRANS  = (1 << 25),    /*!< from --noposttrans */
     RPMTRANS_FLAG_NOCOLLECTIONS        = (1 << 26),    /*!< from --nocollections */
     RPMTRANS_FLAG_NOMD5                = (1 << 27),    /*!< from --nomd5 */
     RPMTRANS_FLAG_NOFILEDIGEST = (1 << 27),    /*!< from --nofiledigest (alias to --nomd5) */
@@ -60,7 +61,9 @@ typedef rpmFlags rpmtransFlags;
   ( RPMTRANS_FLAG_NOPRE |      \
     RPMTRANS_FLAG_NOPOST |     \
     RPMTRANS_FLAG_NOPREUN |    \
-    RPMTRANS_FLAG_NOPOSTUN     \
+    RPMTRANS_FLAG_NOPOSTUN |   \
+    RPMTRANS_FLAG_NOPRETRANS | \
+    RPMTRANS_FLAG_NOPOSTTRANS \
   )
 
 #define        _noTransTriggers        \
index fa17d34..b91953c 100644 (file)
@@ -1521,7 +1521,7 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
 
     /* Run pre-transaction scripts, but only if there are no known
      * problems up to this point and not disabled otherwise. */
-    if (!((rpmtsFlags(ts) & (RPMTRANS_FLAG_BUILD_PROBS|RPMTRANS_FLAG_NOPRE))
+    if (!((rpmtsFlags(ts) & (RPMTRANS_FLAG_BUILD_PROBS|RPMTRANS_FLAG_NOPRETRANS))
          || (rpmpsNumProblems(tsprobs)))) {
        rpmlog(RPMLOG_DEBUG, "running pre-transaction scripts\n");
        runTransScripts(ts, PKG_PRETRANS);
@@ -1557,7 +1557,7 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
     rc = rpmtsProcess(ts) ? -1 : 0;
 
     /* Run post-transaction scripts unless disabled */
-    if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOST))) {
+    if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) {
        rpmlog(RPMLOG_DEBUG, "running post-transaction scripts\n");
        runTransScripts(ts, PKG_POSTTRANS);
     }
index a4fe217..4f2c318 100644 (file)
@@ -415,6 +415,8 @@ static int initModule(PyObject *m)
     REGISTER_ENUM(RPMTRANS_FLAG_NOPREUN);
     REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTUN);
     REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPOSTUN);
+    REGISTER_ENUM(RPMTRANS_FLAG_NOPRETRANS);
+    REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTTRANS);
     REGISTER_ENUM(RPMTRANS_FLAG_NOMD5);
     REGISTER_ENUM(RPMTRANS_FLAG_NOFILEDIGEST);
     REGISTER_ENUM(RPMTRANS_FLAG_NOSUGGEST);