Panu Matilainen [Tue, 21 Feb 2012 14:49:51 +0000 (16:49 +0200)]
Raise exception in python on headerGet() invalid data failure
Panu Matilainen [Tue, 21 Feb 2012 14:24:18 +0000 (16:24 +0200)]
Test for file data tag sanity in fnTag() extensions
- Basename and dirindex counts must be equal, dirnames count must be
larger than zero and no larger than number of basenames. Check
that directory indexes are within range. Additionally file states
array size, if used, must equal to the genaral file count.
Panu Matilainen [Tue, 21 Feb 2012 13:59:34 +0000 (15:59 +0200)]
Fix crash on INSTFILENAMES extension on non-installed package
- Packages with no RPMTAG_FILESTATES cannot have installed files
from our POV, just exit early in that case.
- Rerrange the exit path a bit and only call rpmtdFreeData() on
file states if the corresponding headerGet() call was actually
made. Wont make any difference yet, but once we have other jumps
to exit it will.
Panu Matilainen [Tue, 21 Feb 2012 12:34:57 +0000 (14:34 +0200)]
Sanitize filename tag extension handling
- Rename rpmfiBuildFNames() to fnTag() and push all the td manipulation
there, making all the various different fn-related tags differ by
just the arguments to fnTag() and allowing central error etc
handling. No functional changes (yet) though.
Panu Matilainen [Tue, 21 Feb 2012 12:14:09 +0000 (14:14 +0200)]
Flag error in tag container for non-extension tag retrieval
- This should mostly be a can't happen case, but at least in theory
region retrieval could fail. So could unknown data type, but a header
with unknown data types shouldn't even load... Anyway, there could
be further error cases we might be able to flag here.
Panu Matilainen [Tue, 21 Feb 2012 11:52:18 +0000 (13:52 +0200)]
Add error indicator flag for tag data containers
- Tag retrieval can in some cases fail, especially so for tag
extensions. The headerGet() interface doesn't directly allow
distinguishing between non-existent tag and existent but invalid,
but we can sneak in that information through in the tag data flags.
Panu Matilainen [Tue, 21 Feb 2012 11:50:34 +0000 (13:50 +0200)]
Add getter for rpmtd flags
- While these are mostly of rpmtd-internal interest only, there are
cases when caller might want to know...
Panu Matilainen [Fri, 10 Feb 2012 08:40:45 +0000 (10:40 +0200)]
Remap inode numbers to fit into 32bit integer space on build (RhBug:714678)
- 64bit inode numbers lose their uniquity when brutally truncated
to 32bit integers as we've done so far. This can and will cause rpm
(and cpio) to mix up arbitrary file entries as hardlinks and vice versa.
- As the only interesting aspect of inode numbers is whether they're
equal to something else or not, we dont have to carry the "physical"
on-disk value to preserve semantics. So we can just remap the
inode numbers to something that fits our 32bit integer tags
without causing compatibility complexies with older rpms and
cpio (and since we can't handle more than INT32_MAX files in a package
anyway, breaking compatibility for this would be just braindead dumb).
An extremely simple way to achieve this is to use our
build-time file list index as the basis of stored inode number.
- In theory this breaks inode-device pairing, but as the buildroot
cannot span across filesystems in any remotely normal conditions,
just add a sanity check to catch the dirty tricksters...
- Based on a patch by Zdenek Pavlas, just further simplified and
buildroot fs boundary sanity check added.
Panu Matilainen [Thu, 9 Feb 2012 12:16:29 +0000 (14:16 +0200)]
Also test that total size is calculated correctly wrt hardlinks
Panu Matilainen [Wed, 8 Feb 2012 15:45:34 +0000 (17:45 +0200)]
Add a rough-cut testcase for hardlink handling
- Check that we get expected number of links in package generation,
that all the files got installed and that the linked files are
actually hardlinks (for our purposes, plain inode suffices)
Panu Matilainen [Wed, 8 Feb 2012 13:40:02 +0000 (15:40 +0200)]
Add tag extension to calculate hardlink count for files
Panu Matilainen [Wed, 8 Feb 2012 08:56:09 +0000 (10:56 +0200)]
Switch back to former, much smaller BDB memory pool size (RhBug:752897)
- A larger cache is beneficial in various scenarios, but triggers
horrible worst-case performance under memory pressure (or so my
current theory goes, there might be other factors too). The
worst-case degration is orders of magnitude bigger than the best-case
improvements from the larger cache and for many use-cases doesn't
make a whole lot difference. We could/should tune the cache with
priorizing indexes and all, and perhaps dynamically select the
cache size but for now, the 1Mb cache size is known to "just work".
Panu Matilainen [Fri, 3 Feb 2012 10:46:22 +0000 (12:46 +0200)]
Add --test option to rpmkeys
- Allows, well, testing whether a key could be imported before actually
doing it
Panu Matilainen [Fri, 3 Feb 2012 10:23:31 +0000 (12:23 +0200)]
Honor RPMTRANS_FLAG_TEST in rpmtsImportPubkey()
Panu Matilainen [Thu, 2 Feb 2012 17:13:03 +0000 (19:13 +0200)]
Remove the arbitrary limitation on transaction keyring change
- There are some situations where switching keyrings might be wanted,
especially as long as we dont export a way to pass keyring as
an argument to package reading/verification functions. Since thereäs
no technical reason to disallow it, might as well allow it...
Panu Matilainen [Thu, 2 Feb 2012 12:36:41 +0000 (14:36 +0200)]
Disable signature checking during database rebuild by default
- While it would be perfectly reasonable to perform signature
checking during db rebuild, this is problematic as long as our
keys live in the same database we're rebuilding: the environment
might be paniced, the indexes required for key lookups might be
corrupt or non-existent etc - one would assume there's a reason for
the db is getting rebuilt in the first place. When signature checking
is enabled, we're forced to generate missing indexes on the potentially
borked database we're just about to rebuild, which might not go very
well, and since they keyring loading has no clue its getting called
from middle of db rebuild it'll try to use a shared environment
which might be broken ... etc.
Panu Matilainen [Thu, 2 Feb 2012 12:31:17 +0000 (14:31 +0200)]
Use private environment for database rebuilds too, document
- One of the more common reasons for users to do --rebuilddb is
a paniced environment. Throwing DB_RUNRECOVER errors at the user
who is trying to recover by rebuilding the db isn't terribly
productive (RhBug:590710). Use a private environment while
rebuilding for both the original and new database, and dont bother
with CDB which only slows things down when there are no other
players present.
- Verify wants the same flags but for different reasons...
Panu Matilainen [Thu, 2 Feb 2012 11:53:38 +0000 (13:53 +0200)]
Never load ts keyring if signature checking is disabled
- Loading the pubkeys from database numerous often unwanted side-effects,
if signature checking is disabled then there's no point loading
the keys either.
- Commit
cad147070e5513312d851f44998012e8f0cdf1e3 did this for
rpmReadPackageFile() specifically but we really want it honored
for all operations including headerCheck() and friends, handle
it centrally in loadKeys() for simplicity.
Panu Matilainen [Wed, 1 Feb 2012 15:48:20 +0000 (17:48 +0200)]
Don't free up file info sets on transaction test-runs
- We'd like to get rid of the potentially huge amounts of memory
eaten by file info sets as early as possible, but when there's a
chance that we'll get called again with either added transacation
elements or on-disk changes, such as %pretrans changing something
underneath us, we need to (be able to) recalculate everything
from scratch. Only free up the memory when we know we dont need
it anymore, ie on an actual transaction run.
- This doesn't change anything for rpm itself, for yum and others
which do a separate test-transaction first, it means %pretrans
directory<->symlink replacement hacks and the like have a chance
of working again. I'm sure there's a bug filed on this somewhere but...
Panu Matilainen [Mon, 30 Jan 2012 08:23:51 +0000 (10:23 +0200)]
Use rpmReadHeader() on signature checking path too
- rpmReadHeader() performs far more initial sanity checks on the header
than headerRead() does, and makes behavior consistent with eg query
and install paths. As an added bonus we'll get more detailed
error messages too.
Panu Matilainen [Sat, 28 Jan 2012 16:03:42 +0000 (18:03 +0200)]
Add a basic testcase for bogus filename triplet detection
Panu Matilainen [Sat, 28 Jan 2012 15:53:11 +0000 (17:53 +0200)]
Test for filename triplet sanity in rpmfiNew()
- Basename and dirindex counts must be equal, dirnames count must be
larger than zero and no larger than number of basenames. Check
that directory indexes are within range.
- There are mountains of further checks to be added here (and elsewhere)
but we gotta start somewhere... and filename triplets are one of the more
critical elements we got.
Panu Matilainen [Sat, 28 Jan 2012 15:23:16 +0000 (17:23 +0200)]
xcalloc() cannot return NULL, remove redundant check
Panu Matilainen [Sat, 28 Jan 2012 15:07:42 +0000 (17:07 +0200)]
Don't assume rpmfiNew() always succeeds
- Add NULL checks and add/adjust comments where appropriate.
- The remaining callers should handle NULL fi gracefully if not
entirely correctly: rpmfiFC() returns 0 on NULL fi, so these
callers just see the erronous file info set as "no files" case.
Something to fine-tune later...
Panu Matilainen [Sat, 28 Jan 2012 13:54:40 +0000 (15:54 +0200)]
Add a basic testcase for bogus (incomplete) header detection
Panu Matilainen [Sat, 28 Jan 2012 13:20:48 +0000 (15:20 +0200)]
Add some basic sanity checks to rpmte creation, allow rpmteNew() to fail
- Verify that a header at least has the very basic elements like
name, version, release, os and arch (except for gpg-pubkeys which
dont have the latter two, sigh), fail if not.
- rpmfiNew() cannot currently fail but handling this error will allow
sanity checking the file metadata which can be inconsistent even if
a header is "physically" consistent.
- We'll eventually want to have sanity checks on dependency sets too, but
unlike rpmfiNew(), rpmdsNew() currently returns NULL for non-existent
dependencies (eg most packages do not have conflicts or obsoletes) to
save memory. Either that needs to change or we'll need to check
for tag existence for the meaning of a returned NULL here.
Panu Matilainen [Sat, 28 Jan 2012 13:17:02 +0000 (15:17 +0200)]
Don't assume rpmteNew() always succeeds, part III
- Return error from verifyscript if rpmteNew() fails. This can't
currently happen but handling this error makes it possible to
do sanity checks on the header contents, such as file list integrity etc.
Unlikely to occur for installed packages, but verify can be run
on non-installed packages as well, where failure is more of a possibility.
Panu Matilainen [Sat, 28 Jan 2012 12:50:16 +0000 (14:50 +0200)]
Move TR_ADDED file size init into addTE()
- No functional changes, just stuffing it there along with most
other rpmte init work and remove the pointless switch-case while at it
Panu Matilainen [Sat, 28 Jan 2012 12:18:35 +0000 (14:18 +0200)]
Don't assume rpmteNew() always succeeds, part II
- Return error from rpmtsAddInstallElement() if rpmteNew() fails. This
can't currently happen, but handling this error makes it possible
to do sanity checks on the header contents, such as file list integrity.
Panu Matilainen [Sat, 28 Jan 2012 12:11:08 +0000 (14:11 +0200)]
Error out early if rpmdb open fails on upgrade element addition
- If we can't open the rpmdb then we cannot correctly process the
upgrade, error out early. Mostly a "can't happen" case though.
Also makes the logic a bit clearer, hopefully.
Panu Matilainen [Sat, 28 Jan 2012 11:18:53 +0000 (13:18 +0200)]
Don't assume rpmteNew() always succeeds, part I
- Return error from removePackage() if rpmteNew() fails. This can't
currently happen and is unlikely anyway on already installed
packages (this is more interesting for added packages) but
just in case...
- Handling failure from upgrade- and obsoletes erasures is trickier
both can add any number of erasure elements, and if one of them
fails we'd need to undo all the erasures caused by this element.
Just add a reminder comment for now.
Panu Matilainen [Tue, 17 Jan 2012 11:17:31 +0000 (13:17 +0200)]
Axe unused cruft
Panu Matilainen [Tue, 17 Jan 2012 10:50:51 +0000 (12:50 +0200)]
Kill off yet more repackage remnants from fsm
- CPIO_ALL_HARDLINKS flag and related code has been unused and dead
since rpm >= 4.6.x
Panu Matilainen [Tue, 17 Jan 2012 10:33:26 +0000 (12:33 +0200)]
Lift hard-link payload writing to helper function, fsmStage is big enough
Panu Matilainen [Tue, 17 Jan 2012 09:03:27 +0000 (11:03 +0200)]
Eliminate FSM_WOPEN, FSM_WRITE and FSM_WCLOSE stages
- These are nothing but unnecessarily specialized Fopen(), Fwrite() and
Fclose() for what is a purely local need in expandRegular(). Move
the local stuff where it belongs.
Panu Matilainen [Tue, 17 Jan 2012 08:52:46 +0000 (10:52 +0200)]
Eliminate FSM_ROPEN, FSM_READ and FSM_RCLOSE stages
- These are nothing but unnecessarily specialized Fopen(), Fread() and
Fclose() for what is a purely local need in writeFile(). Move
the local stuff where it belongs.
Panu Matilainen [Tue, 17 Jan 2012 07:01:38 +0000 (09:01 +0200)]
Eliminate file digest related members from fsm struct
- Both digest algo and the current file digest from header are
only needed inside expandRegular(), push the stuff down there.
Panu Matilainen [Mon, 16 Jan 2012 12:35:37 +0000 (14:35 +0200)]
Eliminate the now obviously unnecessary opath member from fsm struct
Panu Matilainen [Mon, 16 Jan 2012 12:30:40 +0000 (14:30 +0200)]
Avoid fsm->opath usage for symlink target
- Instead of behind-the-scenes pointer updating, use fsm->wrbuf
explicitly for the link target. Doesn't make it less hackish
but at least it now stands out.
Panu Matilainen [Mon, 16 Jan 2012 12:17:35 +0000 (14:17 +0200)]
Avoid fsm->opath usage in fsmMakeLinks()
- opath is the file that links will be made to, we grab it at the
start and free at the end. No need to save and restore what we
dont modify, one more fsm->opath usage down...
Panu Matilainen [Mon, 16 Jan 2012 12:13:38 +0000 (14:13 +0200)]
Remove unused FSM_MKLINKS stage
Panu Matilainen [Mon, 16 Jan 2012 11:58:51 +0000 (13:58 +0200)]
Avoid fsm->opath usage in final file rename
- Hopefully this makes the actual operation stand out more clearly
with the unnecessary fsm->opath fiddling out of the picture,
other than that there's not much to gain here.
Panu Matilainen [Mon, 16 Jan 2012 11:15:09 +0000 (13:15 +0200)]
Eliminate unnecessary fsm->path/opath shuffle on unlink
- No need to save and restore what we dont modify...
- Add comments to double-check later for couple of fishy looking bits
Panu Matilainen [Mon, 16 Jan 2012 10:28:52 +0000 (12:28 +0200)]
Eliminate unnecessary fsm->path/opath shuffle on backup renaming
- Makes the code much more obvious to follow since we're not swapping
path/opath back and forwards just to be able to use a throwaway
path for the rename. Dont bother null-checking on logging,
if one of the paths was null we'd be dead already.
- Also fixes an ancient memleak: when osuffix is in use, fsm->path
gets newly malloced before fsmVerify() but this part did another
allocation on it, didn't save and restore fsm->path .. and nothing
was freeing the original (local) allocation of fsm->path, only
restoring the previous value.
Panu Matilainen [Mon, 16 Jan 2012 09:40:37 +0000 (11:40 +0200)]
Eliminate unnecessary st_mode save-modify-restore on dir creation
Panu Matilainen [Mon, 16 Jan 2012 09:31:02 +0000 (11:31 +0200)]
Eliminate unnecessary save-modify-restore around fsmUtime()
Panu Matilainen [Mon, 16 Jan 2012 09:27:49 +0000 (11:27 +0200)]
Eliminate unnecessary save-modify-restore on fifo creation
Panu Matilainen [Fri, 13 Jan 2012 16:15:30 +0000 (18:15 +0200)]
Move symlink() to separate helper function
- Similar to mkfifo(), mknod() & friends, doesn't do much but for
consistency and fsmStage() size sanity...
Panu Matilainen [Fri, 13 Jan 2012 16:05:44 +0000 (18:05 +0200)]
Eliminate stupid fsm->path/opath in FSM_COMMIT now that we can
- Now that we can directly operate on temporarily variables instead
of having to save-ping-restore-pong them, lets do so...
- Also eliminating NULL-checks on the path variables in logging - if
either of the paths were NULL we would've already crashed in rename()
Panu Matilainen [Fri, 13 Jan 2012 15:54:23 +0000 (17:54 +0200)]
Blarg, stupid stupid mistake breaking symlink handling
- Introduced in commit
d15bf56a70fdc2322a8d71f255241c20d895834f and
uncaught prior to push as none of the test-suite cases involve
symlinks. This is what happens when trying to quickly rewrite
git history to put combine a forgotten change into earlier ones,
guilty as charged :(
Panu Matilainen [Fri, 13 Jan 2012 15:02:23 +0000 (17:02 +0200)]
Only pass what little is actually needed in fsmMkdirs()
- Once all the other cruft has been carved out, turns out this needs
nothing but a directory iterator which we can init and free
in the caller easily enough, and selabel handle (duh). All the
rest is independent of fsm internals in reality.
Panu Matilainen [Fri, 13 Jan 2012 14:47:02 +0000 (16:47 +0200)]
Eliminate stupid fsm->sb.st_mode abuse from fsmMkdirs()
- At the point where this runs there's probably nothing at all to
save and restore in the stat buf anyway, but it's just stupid to
abuse that when all we need is a local mode_t temp variable. Fix
it now that we can.
Panu Matilainen [Fri, 13 Jan 2012 14:39:55 +0000 (16:39 +0200)]
Move mknod() to separate helper function
- Similar to mknod() and all, this doesn't do anything that special
but fsmStage() is big enough as it is.
Panu Matilainen [Fri, 13 Jan 2012 14:34:47 +0000 (16:34 +0200)]
Move mkfifo() to separate helper function
- Similar to the other fsm syscall wrappers, this doesn't do anything
that special, but fsmStage() is big enough without things like
this inline.
Panu Matilainen [Fri, 13 Jan 2012 14:21:11 +0000 (16:21 +0200)]
Change fsmReadLink() to take "normal" arguments
- This doesn't need access to the entire fsm, it just needs a buffer
to place the results in / return errors. Currently the "out" buffer
is (ab)used for the results, this just forces that to stand out
and should make it easier to sanitize later.
Panu Matilainen [Fri, 13 Jan 2012 13:23:23 +0000 (15:23 +0200)]
Change fsmUtime() to take "normal" arguments
- This doesn't need access to the entire fsm, just path and mtime
from coming from a header originally. Will allow eliminating
save -> abuse -> restore behavior in caller but leaving till later...
Panu Matilainen [Fri, 13 Jan 2012 13:14:24 +0000 (15:14 +0200)]
Change fsmChown(), fsmLChown() and fsmChmod() to take "normal" arguments
- None of these needs access to the entire fsm, they only
exist to map and filter errors to rpm special needs and to
create debug swew on top of the plain syscalls.
Panu Matilainen [Fri, 13 Jan 2012 13:06:06 +0000 (15:06 +0200)]
Change fsmMkdir() to take "normal" arguments
- This doesn't need access to the entire fsm, it only exists to
map errors to CPIOERR_* and create debug foo. This will allow
eliminating save -> abuse -> restore behavior in callers, but
leaving that till later.
Panu Matilainen [Fri, 13 Jan 2012 12:47:19 +0000 (14:47 +0200)]
Change fsmStat() to take "normal" arguments
- This doesn't need access to the entire fsm, just regular stat()
args and a flag whether to use lstat() or stat(). "followlinks"
or such would be saner name for the flag but leaving that for now...
Panu Matilainen [Fri, 13 Jan 2012 11:01:24 +0000 (13:01 +0200)]
Change fsmRename() to take "normal" arguments
- This doesn't need access to the entire fsm, just regular rename()
args and a flags to see whether "secure" delete should be done.
In itself this only looks like more trouble, but all the callers
are fiddling and saving and restoring with fsm->[o]path just
to call this, which we can now avoid. Leaving sanitizing the
callers till later though, this is a minefield...
Panu Matilainen [Fri, 13 Jan 2012 10:36:01 +0000 (12:36 +0200)]
Change fsmUnlink() and fsmRmdir() to take "normal" arguments
- Neither of these needs access to the entire fsm, they mostly
exist to create debug cruft and to map errors to CPIOERR_*
Panu Matilainen [Fri, 13 Jan 2012 09:36:28 +0000 (11:36 +0200)]
Sanitize file capability setting in fsm
- Move parsing, setting and freeing of capabilities into simple
helper function, there's no point whatsoever having the current
capability stored in fsm when it only complicates freeing and all.
WTH was I thinking when implementing this? (well, everything in
fsm was done that way so... but that's a lame excuse)
Panu Matilainen [Fri, 13 Jan 2012 09:08:47 +0000 (11:08 +0200)]
Sanitize selinux labeling in fsm
- Move all the label foobar into a simple helper function which
finds, sets and frees the context if selinux is enabled, use
for both regular operation and orphan directory labeling.
Simplifies things a good deal...
- While the selabel handle can change during a transaction, it
wont change while the fsm is running so its sufficient to grab
it on entry instead of repeatedly calling rpmtsSELabelHandle() after
figuring out where in the world our ts might be.
Panu Matilainen [Fri, 13 Jan 2012 08:27:11 +0000 (10:27 +0200)]
Eliminate unused subdir member from fsm struct
Panu Matilainen [Fri, 13 Jan 2012 08:19:50 +0000 (10:19 +0200)]
Eliminate silly sufbuf from fsm struct
- Allocate fsm->suffix directly when suffix is needed instead.
Doesn't change anything, only makes life that little bit simpler.
Panu Matilainen [Fri, 13 Jan 2012 08:06:09 +0000 (10:06 +0200)]
Ensure installs always use a temp suffix on files
- This bogosity goes back to commit
fcf6b50378eaeac4c1f7ca215b33586b4d41072f
which was supposed to fix files getting erased if time() returns
errors (RhBug:223931). Problem is, this "fix" didn't fix anything
at all as the suffix still wouldn't be created in the error
case, even if the FSM_UNDO part did the right thing. We always
want a suffix on installs, it doesn't matter *what* the suffix is.
Panu Matilainen [Fri, 13 Jan 2012 07:41:25 +0000 (09:41 +0200)]
Remove unused "orphan" directory creation tracking variable from fsm
Panu Matilainen [Fri, 13 Jan 2012 07:30:06 +0000 (09:30 +0200)]
Move directory tracking variables out of fsm struct to local scope
- These are not used or needed outside fsmMkdirs() so its just
plain dumb to have them in the big struct. No functional changes,
just taming the fsm monster a little bit.
Panu Matilainen [Fri, 13 Jan 2012 05:54:51 +0000 (07:54 +0200)]
Add bunch of links to test-suite chroot to allow selinux to work
- With the new warning on failure to open selinux labels from
commit
7a8b75d26605cf7a3fde9f624a80d6fb8390fcbd, the test-suite
fails on large number of tests due to the extra output. This
takes care of these false alarms on F16 at least.
- Recent selinux wants /etc/selinux and /sys (for /sys/fs/selinux),
older ones would want /selinux. Add in /proc for good measure,
selinux doesn't need it butit wont hurt either, other things will
want it sooner or later.
Ales Kozumplik [Thu, 22 Dec 2011 13:53:51 +0000 (14:53 +0100)]
remove the 'path' parameter of rpmtsSELabelInit()
- It is always selinux_file_context_path() anyway.
Ales Kozumplik [Thu, 22 Dec 2011 13:34:03 +0000 (14:34 +0100)]
selinux: reopen label between transactions if necessary (RhBug: 746073)
Panu Matilainen [Thu, 12 Jan 2012 07:52:34 +0000 (09:52 +0200)]
Show arch in --last output too (RhBug:768516)
Panu Matilainen [Wed, 11 Jan 2012 13:35:16 +0000 (15:35 +0200)]
Eliminate now unnecessary runFsm() helper from psm
Panu Matilainen [Wed, 11 Jan 2012 13:30:50 +0000 (15:30 +0200)]
Eliminate no longer needed RPMFI_ISBUILD and RPMFI_ISSOURCE internal flags
Panu Matilainen [Wed, 11 Jan 2012 13:11:37 +0000 (15:11 +0200)]
Turn FSM into a blackbox, much like PSM is
- Similar in spirit to PSM blackbox treatment in
commit
df9cdb1321ada8e3b120771f91a2eefab4ac2ad5, except that
technically fsm guts are still wide-open in fsm.h due to cpio
"needing" them (yuck).
- Allows getting rid of dumb a**-backwards things like rpmfiFSM()
which is just not needed, fsm is a relatively short-lived entity
inside psm and build, nobody else needs to bother with it except
for the returned results.
- Figure out the cpio map flags in fsmSetup() where it logically belongs,
we have all the necessary info available there.
- Get rid of newFSM() and freeFSM(), we can just as well place the
fsm on stack, merge the necessary cleanup bits from freeFSM()
into fsmTeardown()
- Supposedly no functional changes, knock wood.
Panu Matilainen [Wed, 11 Jan 2012 10:17:31 +0000 (12:17 +0200)]
Eliminate archiveSize member from rpmfi
- rpmfi itself doesn't need it for anything, its only really used
for progress reporting during install. Grab the size into psm
total directly, this is already passed down to fsm.
- Removes one of the last remaining rpmfi opacity violations, just
fi->apath to go...
Panu Matilainen [Wed, 11 Jan 2012 10:16:53 +0000 (12:16 +0200)]
Explicitly tell rpmfiNew() when its being used for build
- Eliminate feeble heuristic on archive size tag not being set during
build for detecting this and have build code explicitly pass
RPMFI_ISBUILD flag instead.
- Also eliminate the pointless isSource variable from rpmfiNew() while.
Panu Matilainen [Wed, 11 Jan 2012 09:06:16 +0000 (11:06 +0200)]
Issue package install/erase progress callbacks on justdb operation too
- Large --justdb operations can take considerable amount of time as well,
getting progress bars for it is nice even if hardly necessary...
Panu Matilainen [Wed, 11 Jan 2012 08:47:28 +0000 (10:47 +0200)]
Eliminate fluff from PSM_INIT
- rpmpsmStage() runs with RPMRC_OK as assumed result, no need to
set explicitly here.
- Dont bother testing for justdb flag here. The justdb case doesn't
need fi->apath but it doesn't exactly hurt either, and we'll want
to eliminate the apath kludge sooner or later anyway.
Panu Matilainen [Wed, 11 Jan 2012 07:07:05 +0000 (09:07 +0200)]
Update translations & sync with transifex
Panu Matilainen [Tue, 10 Jan 2012 18:26:55 +0000 (20:26 +0200)]
Oops, forgot to mark our new progress messages for translation
Ville Skyttä [Tue, 10 Jan 2012 08:48:13 +0000 (10:48 +0200)]
Adapt perl and python fileattrs to file 5.10 magics
- file 5.10 has changed magics at least for perl and python scripts, samples:
5.09: a /usr/bin/perl -w script, ASCII text executable, with very long lines
5.10: Perl script, ASCII text executable, with very long lines
5.09: a /usr/bin/python script, ASCII text executable
5.10: Python script, ASCII text executable
Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Panu Matilainen [Tue, 10 Jan 2012 08:38:31 +0000 (10:38 +0200)]
Transaction element parent is a transaction element, not an integer
- Ehm, this has been broken in the python bindings since the start,
nobody noticed. Of course the parent value isn't particularly
useful in normal usage but still...
Panu Matilainen [Tue, 10 Jan 2012 08:35:30 +0000 (10:35 +0200)]
Minor cleanup to rpmte_Key()
- Fix misleading indentation, initialize Key on declaration.
No functional changes.
Panu Matilainen [Thu, 5 Jan 2012 14:23:17 +0000 (16:23 +0200)]
And finally, permit --hash and --percent cli-switches on erasures too
Panu Matilainen [Thu, 5 Jan 2012 14:17:33 +0000 (16:17 +0200)]
Add erasure callback support to rpmShowProgress() and enable on rpmErase()
- Just use the same bits as install does, they behave the same for
our purposes. On upgrades the output would get confusing especially
with --hash when package versions aren't output'ed, so we print
out extra output when entering install and erase stages. Only
do this when --hash is used (ie a human is probably watching us)
to hopefully avoid breaking scripts (including our test-suite) that
rely on the ages old behavior of non-hashed output.
Panu Matilainen [Thu, 5 Jan 2012 13:18:28 +0000 (15:18 +0200)]
Issue actual erasure progress callbacks too
- Whereas on install the progress is measured by bytes written to
disk vs total archive size, on erase the best we can do is
going by the number of files in the package. Fsm iterates backwards
on erase so we can't just use fsm->ix but need to re-revert the value.
Panu Matilainen [Thu, 5 Jan 2012 12:48:22 +0000 (14:48 +0200)]
Clean up progress callbacks in fsm/psm machinery
- Move notifications from fsm to psm side for sanity and symmetry,
psm already has members to hold the callback state.
- Replace PSM_NOTIFY "state" with a helper function that both
fsm and psm itself use (except for error callbacks which are
a bit different)
- Init psm->total early, this doesn't change and can now be
used to refer to "all done" value whatever it happens to be,
instead of magic "100" values etc.
- Packages with no files are now handled through the same path
as everything else from progress reporting pov, we just skip calls
to fsm if there are no files.
- Issue stop callbacks for install as well. While INST_CLOSE_FILE
can be (and is currently) used to detect this condition, its
conceptually an entirely different thing.
- Fix erasure callback parameters, they were reversed (starting from
total and ending with 0, ehh...)
Panu Matilainen [Thu, 5 Jan 2012 12:34:46 +0000 (14:34 +0200)]
Add enum for RPMCALLBACK_INST_STOP callback event
- Unused atm but we'll be adding this shortly
Panu Matilainen [Thu, 5 Jan 2012 12:24:33 +0000 (14:24 +0200)]
Pass and remember the controlling psm (if any) in fsm
Panu Matilainen [Wed, 4 Jan 2012 10:01:11 +0000 (12:01 +0200)]
Eliminate repackage notification remnants from fsm
- This has been unused and dead code since rpm >= 4.6.0
Panu Matilainen [Wed, 4 Jan 2012 09:31:00 +0000 (11:31 +0200)]
Use rpmtsNotify() directly for psm error callbacks
- On error we're already on our way out of the psm, no point mucking
with the psm state. No functional changes, just makes the code
a little bit shorter.
Ales Kozumplik [Wed, 4 Jan 2012 15:47:04 +0000 (16:47 +0100)]
document -D and -E in man.
Ales Kozumplik [Tue, 3 Jan 2012 11:36:30 +0000 (12:36 +0100)]
rpmOption.required is not used.
Ales Kozumplik [Tue, 3 Jan 2012 09:50:51 +0000 (10:50 +0100)]
rpmrc: do not use that nonexistent rpmOptionValue struct.
Ales Kozumplik [Wed, 4 Jan 2012 12:50:27 +0000 (13:50 +0100)]
depends.c: save us one rpmdsNew in addObsoleteErasures.
- replaces rpmdsAnyMatchesDep with rpmdsNVRMatchesDep
Ales Kozumplik [Wed, 4 Jan 2012 09:47:17 +0000 (10:47 +0100)]
depends.c: unused parameters in addUpgradeErasures, addObsoleteErasures.
- remove them.
Panu Matilainen [Tue, 3 Jan 2012 11:10:26 +0000 (13:10 +0200)]
Implement scriptlet start and stop callbacks (RhBug:606239)
- Adds two new transaction callbacks: RPMCALLBACK_SCRIPT_START and
RPMCALLBACK_SCRIPT_STOP which get issued for every scriptlet we run.
- On script start, callback can optionally return an FD which will
override transaction-wide script fd to make it easier to accurately
collect per-scriptlet output (eg per-scriptlet temporary file).
Callback is also responsible for closing the fd if it returns one.
- For both callbacks, "amount" holds the script tag number. On stop
callback, "total" holds the scriptlet exit status mapped into
OK/NOTFOUND/FAIL for success/non-fatal/fatal errors. Abusing "notfound"
for warning result is ugly but differentiating it from the other
cases allows callers to ignore SCRIPT_ERROR if they choose to
implement stop and start.
Panu Matilainen [Tue, 3 Jan 2012 09:56:37 +0000 (11:56 +0200)]
Eliminate rpm cli callback internals from the API
- rpmcliHashes*, and rpmcliProgress* and rpmcliPackagesTotal are
implementation details of rpmShowProgress() and are useless outside
of it. Make them static, these shouldn't have been exported to
begin with.
Panu Matilainen [Tue, 3 Jan 2012 09:49:32 +0000 (11:49 +0200)]
Eliminate pointless rpmcliPackagesTotal fiddling
- The total number of packages equals transaction order count, which
is passed as total to transaction start callback. In particular
messing with this from rpmtsAddInstallElement() is just stupid.
- This will break callers that are relying on rpmcliPackagesTotal value
outside a running transaction, but that's just stupid anyway. The
correct way to get number of elements in transaction set is calling
rpmtsNElements(), which has been there for a good part of a decade.