Commit Graph

5083 Commits

Author SHA1 Message Date
Panu Matilainen 0b9c93ed18 Fix missing error on --import on bogus key file (RhBug:869667)
- When the "BEGIN PGP" marker is not found at all, we would silently
  exit with success when trying to import utter garbage, such as
  rpmkeys --import /bin/bash (not that I consider bash as gargabe ;)
2012-10-30 09:29:46 +02:00
Panu Matilainen 6db697526b Remove transition-time leftover pool unfreezing
- Nobody is freezing our pool so there's no need to unfreeze it either...
2012-10-26 12:16:01 +03:00
Panu Matilainen 3ff1f73efe Eliminate static "misc stuff pool" from rpmfi
- Prior to string pool existence, the static "caches" were kinda
  necessary for sharing the relatively static content of user/group
  names and file languages, but this is nothing but an unfreeable
  block of memory at this point. Just use the same pool as everything
  else - whether private or shared.
2012-10-26 11:47:31 +03:00
Panu Matilainen e137d28d10 Dont bother with digest and link comparisons if size differs, part II
- If link or regular file sizes differ, they cannot possibly be
  identical. Saves us from doing bunch of pointless string and
  memory comparisons on what's a very busy path - not exactly a huge
  with but measurable nevertheless.
2012-10-19 14:36:36 +03:00
Panu Matilainen 5811588f67 Dont bother with %config digests on conflicts if size differs
- Files of different size cannot possibly be identical, dont bother
  with expensive digest calculation.
2012-10-19 13:45:04 +03:00
Anders F Bjorklund ac959fed00 Add lua 5.2 support.
Add compatibility support for both lua-5.1 and lua-5.2,
assuming that the LUA_COMPAT might have been disabled.

Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
2012-10-09 08:28:52 +03:00
Panu Matilainen 389b1ab706 Don't bother calculating digests of %ghost %config files
- Calculating digest of %ghost config is useless as there's nothing
  to compare the result to. Also we never take backups of %ghost
  configuration anyway, so this is a total waste of time. One common
  case of %ghost %config is the rpmdb (environment and all) which
  can be rather large and calculating digests can take several seconds,
  only for the results to be thrown away unused.
- There are some cases where it might be reasonable to back up %ghost
  %config (eg if it gets replaced by non-config), but
  rpmfiConfigConflictIndex() doesn't have sufficient context to figure
  that out. For now, preserve the traditional simple rule: no backups
  for ghosts, ever.
2012-10-08 09:38:57 +03:00
Panu Matilainen e17bf0449d Use rpmal lookups for already added obsoletions too
- Related to commit bee348b5d1,
  use the newly added obsoletes hash to lookup already added
  obsoleters. Eliminates the dumb linear lookup and is unsurprisingly
  a whole lot faster on larger transactions.
2012-10-05 11:38:26 +03:00
Panu Matilainen 15f9f2d7f0 Add a hash + lookup function on obsoletes to rpmal
- Similar lazily created hash as provides for fast obsoletes lookups.
  This is so similar the provides that creation etc functions should
  be unified, but leaving that exercise till later.
2012-10-05 11:35:11 +03:00
Panu Matilainen 99d42b479a Rename rpmalProvidesHash to rpmalDepHash
- The same hash type is valid for any ds and we'll be adding more...
2012-10-05 11:34:22 +03:00
Panu Matilainen 2d62d5e5c5 Avoid changing the file info sets when adding to rpmal file hash
- Use indexed access to the file info sets so we're not mucking
  around with somebody elses rpmfi iterator index (currently not an
  issue but still...)
2012-10-05 11:25:49 +03:00
Panu Matilainen 7612b1684a Avoid changing the dependency sets when looking up from rpmal
- Use indexed access and comparison to avoid mucking around with
  eg transaction element dependency sets while the callers are walking
  over them.
2012-10-05 10:16:44 +03:00
Panu Matilainen f4bb2487d4 Avoid changing the dependency sets when adding to rpmal hash
- Use indexed access to the dependencies so we're not mucking with
  the rpmds iterator index behind anybodys back, this could affect
  all sorts of things but miraculously nothing is hitting it atm...
2012-10-05 10:13:09 +03:00
Panu Matilainen db80e6ed5a Guard against NULL ds in the rpmds indexed getters
- NULL dependency sets are all over the place as NULL ds means
  "no dependencies of this kind", whereas for eg rpmfi NULL is an
  error.
2012-10-05 10:09:50 +03:00
Panu Matilainen f4758b1920 Export the indexed rpmds accessors internally
- Add an internal header for rpmds too to allow adding interfaces we
  dont necessarily want to export in the public API, make the indexed
  accessors available internally.
2012-10-05 10:07:52 +03:00
Panu Matilainen 62ddd3149f Add indexed access variants for rpmdsColor() and rpmdsCompare()
- Various places in rpm need random access to the dependency sets,
  save and restore on somebody elses "iterator index" just doesn't
  cut it. This is merely preliminaries for further changes.
2012-10-05 10:07:14 +03:00
Panu Matilainen d5dd3abe09 Be as lazy as possible wrt rpmal hash creation
- Separate provides and files hash creation, delay both until the last
  moment before first valid lookup. In practise, this means the provides
  hash is created early due to lookups from rpmtsAddInstallElement(),
  but the big bad file hash creation is delayed until the entire
  transaction set has been more-or-less populated. Which means we have
  a better idea about the necessary hash table size, meaning fewer
  hash resizes, resulting in good deal faster execution with no
  downsides - if something happened to trigger an early file lookup
  it'll all still work, just slower.
2012-10-04 15:57:58 +03:00
Panu Matilainen bee348b5d1 Use rpmal lookups for finding redundancies in the added set
- Replace the dumb linear search across all elements on each
  addition with (filtered) rpmal lookups where possible. rpmal
  doesn't (yet) have obsoletes information so for already added
  obsoletions we have no choice but to walk the walk.
- As a result, findPos() is hugely faster for large transactions
  but rpmal hashes are now generated on the fly for everything
  instead of doing it all at once before the actual dependency
  checks / ordering, which will cost us something in terms of
  hash table resizes.
2012-10-02 16:40:45 +03:00
Panu Matilainen 5d3018c4ed Dont bother with rpmRelocateFileList() if relocations have been specified
- rpmRelocateFileList() doesn't modify anything when no relocations
  are to be done, but what it does is not exactly free, unnecessarily
  calling it is dumb.
2012-10-02 16:17:05 +03:00
Panu Matilainen 03b660c615 Only return non-NULL from rpmalAllSatisfiesDepends() on real matches
- The provides hash lookup can and does return hits that dont actually
  satisfy the dependency. Dont bother callers with apparent hits
  (ie non-NULL returns) when nothing actually matches the dependency.
2012-10-02 12:15:49 +03:00
Panu Matilainen b900c06b99 Export rpmalAllSatisfiesDepend() internally (again)
- For some uses, we need to be more selective about providers...
2012-10-02 10:50:10 +03:00
Panu Matilainen 50b0000b07 Pass the newly create ts element instead of header to findPos()
- Avoids a little bit of extra work, we already have the relevant
  bits of information in the rpmte and grabbing them from there is
  cheaper than looking up stuff from headers. Also avoids creating
  another copy of the new elements obsoletes dependency set unnecessarily.
2012-10-02 10:37:36 +03:00
Panu Matilainen e9054c9880 Eliminate all the now unnecessary fsm->ix save-and-restores
- Now that the relevant places are accepting file index as argument,
  we no longer need to save and restore fsm->ix in all the places
  dealing with hard links.
2012-10-01 13:19:59 +03:00
Panu Matilainen f71af8b4a1 Pass file index as argument to fsm fsmMapPath()
- Normally this is just the current index, but when writing links
  its something else and makes sense as an argument (so we dont
  need to save and restore fsm->ix when doing something different)
2012-10-01 13:15:30 +03:00
Panu Matilainen 596617533b Pass file index as argument to fsm fsmCommit()
- Normally this is just the current index, but when writing links
  its something else and makes sense as an argument (so we dont
  need to save and restore fsm->ix when doing something different)
2012-10-01 13:01:33 +03:00
Panu Matilainen e7d4d6b3dc Pass file index as argument to fsm writeFile()
- Normally this is just the current index, but when writing links
  its something else and makes sense as an argument (so we dont
  need to save and restore fsm->ix when doing something different)
2012-10-01 12:55:21 +03:00
Panu Matilainen 57ea65e430 Eliminate current hardlink set from fsm struct
- Return the hard link set from saveHardLink() when ready into a local
  variable in the only place that cares: rpmPackageFilesInstall().
  Another pointless and hard-to-follow fsm-global state variable
  gone...
2012-10-01 12:30:28 +03:00
Panu Matilainen f5504e130a Pinpoint the one place where fsm->li is modified on real purpose
- saveHardLinks() is the only place where fsm->li value matters on
  return: during installation its used for "returning" the current
  link set when all the links in that set have been seen so they
  are ready for creating.
2012-10-01 12:16:18 +03:00
Panu Matilainen ae773c7926 Avoid using fsm->li directly when creating pending hard links
- fsmMakeLinks() operates on the current link at hand, doesn't walk
  the links or anything... pass the link as an argument from the sole
  caller and operate on that.
2012-10-01 12:08:27 +03:00
Panu Matilainen 676878e5b5 Avoid using/modifying fsm->li when committing hardlinks
- Using a "global" variable for local... more of the same:
  fsmCommitLinks() gets called at the end of each round of the install
  loop if there are links, it does the actual link discovery on its
  own and fsm->li state will get rewritten by saveHardLink() at the
  start of the next round.
2012-10-01 11:53:48 +03:00
Panu Matilainen 364f580854 Avoid using/modifying fsm->li when writing links to payload
- Using a "global" variable for local iteration is just... this gets
  called once at the end of package build, fsm->li carries no
  global state here.
2012-10-01 11:47:29 +03:00
Panu Matilainen f08b8105fa Avoid using/modifying fsm->li when freeing hard link sets
- Using a "global" variable for local iteration is...
2012-10-01 11:39:47 +03:00
Panu Matilainen b746dbc136 Avoid using/modifying fsm->li on hard link checking
- Using a "global" variable for local iteration is just dumb...
2012-10-01 11:37:01 +03:00
Panu Matilainen aa2117b94e Move hardlink saving out of fsmInit()
- Now that we have separate functions for install, erase and build,
  handle the hardlink saving locally where it matters.
2012-10-01 11:33:08 +03:00
Panu Matilainen afb91f205b Free hardlink sets centrally in fsmFree()
- Having three places doing the same thing doesn't make a whole
  lotta sense...
2012-10-01 09:54:35 +03:00
Panu Matilainen eeea54c76b Filter out skipped files on hardlink checking
- Legitimately skipped files (links) must not cause install-errors.
  This has always been broken, but the errors were completely ignored
  on install prior to rpm 4.10, and now that we're only creating the
  first instance of a shared file, secondary arch multilib packages
  with hardlinks were causing install failures because of the "missing"
  hardlinks here.
- The relevant part here is obviously the XFA_SKIPPING() test, for
  which we need the file states. To keep the lines short, grab the
  index to a helper variable and replace other fsm->li->filex[i] uses
  with that too.
2012-10-01 09:35:39 +03:00
Panu Matilainen 5f9af37583 Simplify fpLookupSubdir() a bit
- Use string offsets for basename start and end to track the progress,
  avoiding +1/-1 adjustments in every damn calculation.
- Reduce the places where new basename is calculated to just one
  at the start of the main loop, just adjust the basename start
  and end accordingly beforehand.
- This shouldn't change any functionality, just simplify the code
  a little bit.
2012-09-28 12:43:39 +03:00
Panu Matilainen b81b4a3524 Minimally resurrect fpLookupSubdir() functionality
- fpLookupSubdir() has been broken for a long, long time, probably
  because some subtle extra/missing slash issue. It got totally
  wrecked by the pool changes though: there are heading and trailing
  slashes everywhere and the calculations were off-by-one to every
  possible direction because of that. And the previous attempts
  (eg commit 566a332c69) makes
  even a bigger mess of it.
- This is far messier than it needs to be, but for now going for
  minimal resurrection rather than rewrite it all at once. It's also
  not quite right either, but it does now actually detect at the conflicts
  it was always supposed to.
2012-09-27 15:56:56 +03:00
Panu Matilainen 3ba2d1bc9c Fixup a copy-paste error in rpmdsPool() doxygen markup 2012-09-27 13:09:39 +03:00
Panu Matilainen 3916fee0cc Remove leftover, no longer valid comment 2012-09-27 11:43:36 +03:00
Panu Matilainen 824fd200b0 Switch back to early added packages rpmal populating
- Basically reverts commit d10a994132
  which was just a temporary transition-period thing. Moving pointers
  dont bother us anymore...
2012-09-24 11:57:55 +03:00
Panu Matilainen ad3f256be3 Take advantage of rpmstrPoolStreq() in rpmdsCompare()
- This gives quite a speedup for dependency checking as within
  transaction, all the dependency sets come from the same pool
  and making this just an integer comparison.
2012-09-21 15:49:11 +03:00
Panu Matilainen 921be290fc Eliminate strdup() in doLookupId()
- Take advantage of the length-aware pool string->id lookup to avoid
  the need to copy and locally modify the canonized dirname. Makes
  the code cleaner and a little bit faster too.
- There are further possibilities in this direction, canonDir()
  could return an id instead of malloced memory but that doesn't
  remove the need for temporary bugg^H^Hffer to clean up the dir.
2012-09-19 13:14:21 +03:00
Panu Matilainen 0c1e3ec94d Lift directory name canonicalization into a helper function
- Suddenly it all seems so much clearer...
- Also try to better handle the theoretical realpath() errors: on
  failure the buffer contents are undefined and we shouldn't look
  at them, free the buf and return NULL.
2012-09-19 12:50:31 +03:00
Panu Matilainen 6df098e76b Unbreak fingerprinting when called twice for the same transaction set
- Fixes regression (yum updates barf with conflicts) from commit
  3b492620fb which doesn't affect rpm
  itself but breaks some API users like yum that first run a
  test-transaction and if that succeeds, the same transaction is run
  for real. In that case we need to redo the whole fingerprint dance
  from scratch: throw away any former results and redo.
- Blaming Fedora 18 alpha preparations for not noticing this earlier:
  there have been no updates to F16/F17 in almost a week, effectively
  disabling a part of the regular rpm development QA :P
2012-09-18 19:14:34 +03:00
Panu Matilainen 9ffe90fc2d Oops, refactoring error in commit 327701572f
- sizeof() doesn't work very well for malloced arrays... not that it
  matters a whole lot, this isn't a path that will ever be executed
  afaict.
2012-09-18 10:40:18 +03:00
Panu Matilainen a642de2e7f Ensure fingerprint subdirs have heading slashes
- Similar to commit ad99f4e84a but at the
  other end of the name: not all subdirs will exist in the pool already
  but none of them exists without the heading slash. Saves another handful
  of megs on larger transactions.
2012-09-18 10:03:13 +03:00
Panu Matilainen ad99f4e84a Ensure directories have trailing slashes in doLookupId()
- In the old days, stripping trailing slashes made sense as its useless
  as it is and stripping it saved a bit of memory, but now with the
  directories in the pool things are different: while not all paths
  we'll see here necessarily exist in the pool already, NONE of them
  exists without the trailing slash, so stripping it out wastes gobs
  of memory.  Simplifies the code a bit and saves several megs of memory
  on larger transactions, what's not to like?
2012-09-18 10:00:15 +03:00
Panu Matilainen bb619c0672 Further doLookupId() cleanup
- Refer to dirName when we haven't yet cleaned it up to clarify uses,
  only initialize the const cleaned dir name pointer after we've
  successfully cleaned it up. Rename cleanDirName to cdn to keep it
  sweet and short, and suggest the relation to cdnl and cdnbuf.
2012-09-18 08:17:09 +03:00
Panu Matilainen 327701572f Elimiate one of the umphteen directory variables in doLookupId()
- Use dynamically allocated cdnbuf in the non-absolute path case (when
  exactly that occurs is another question) too instead of the on-stack
  dir[], making the two paths a bit more similar.
2012-09-18 06:56:46 +03:00