summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2012-10-01Avoid using/modifying fsm->li on hard link checkingPanu Matilainen1-4/+4
- Using a "global" variable for local iteration is just dumb...
2012-10-01Move hardlink saving out of fsmInit()Panu Matilainen1-5/+6
- Now that we have separate functions for install, erase and build, handle the hardlink saving locally where it matters.
2012-10-01Free hardlink sets centrally in fsmFree()Panu Matilainen1-11/+3
- Having three places doing the same thing doesn't make a whole lotta sense...
2012-10-01Filter out skipped files on hardlink checkingPanu Matilainen1-2/+4
- 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-09-28Simplify fpLookupSubdir() a bitPanu Matilainen1-33/+22
- 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-27Minimally resurrect fpLookupSubdir() functionalityPanu Matilainen1-27/+21
- 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 566a332c6907a0969ea8f79a4c7a62bca2d1f1b4) 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-27Fixup a copy-paste error in rpmdsPool() doxygen markupPanu Matilainen1-1/+1
2012-09-27Remove leftover, no longer valid commentPanu Matilainen1-1/+0
2012-09-24Switch back to early added packages rpmal populatingPanu Matilainen2-19/+1
- Basically reverts commit d10a9941326f7d397428c8ab0b4ba571cfc6c184 which was just a temporary transition-period thing. Moving pointers dont bother us anymore...
2012-09-21Take advantage of rpmstrPoolStreq() in rpmdsCompare()Panu Matilainen1-1/+1
- 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-19Eliminate strdup() in doLookupId()Panu Matilainen1-20/+14
- 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-19Lift directory name canonicalization into a helper functionPanu Matilainen1-17/+23
- 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-18Unbreak fingerprinting when called twice for the same transaction setPanu Matilainen1-1/+4
- Fixes regression (yum updates barf with conflicts) from commit 3b492620fb35a21d05b975e31130dc071f6fd8e2 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-18Oops, refactoring error in commit 327701572ff912413ec9564d29d946b4ab21a9f3Panu Matilainen1-1/+1
- 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-18Ensure fingerprint subdirs have heading slashesPanu Matilainen1-6/+2
- Similar to commit ad99f4e84a5fea05edca59257b6e00d91d6c8a08 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-18Ensure directories have trailing slashes in doLookupId()Panu Matilainen1-15/+6
- 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-18Further doLookupId() cleanupPanu Matilainen1-9/+9
- 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-18Elimiate one of the umphteen directory variables in doLookupId()Panu Matilainen1-9/+11
- 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-18Avoid redundant ds -> id -> string lookups in rpmalAllFileSatisfiesDepend()Panu Matilainen1-4/+2
- We need to grab the dependency string in rpmalAllSatisfiesDepend() already to see whether its a file dependency or not, just pass that to the file deps to avoid redundant work.
2012-09-18Dont bother with separate notifications on multiple file dep matchesPanu Matilainen1-3/+3
2012-09-18Avoid the string copy in rpmalAllFileSatisfiesDepend() now that we canPanu Matilainen1-5/+1
2012-09-17Permit key imports even if signature checking is disabled (RhBug:856225)Panu Matilainen1-1/+7
- Since commit 290fcbbe6b3ca2fb1d5e4a7269a32a94f8a1563a, key imports on transaction sets where signature checking is disabled would fail due to keyring not getting loaded at all. A regression of sorts, in other words. As a minimal fix, temporarily enable sigcheck vsflags during keyring loading.
2012-09-15Be more selective about legacy retrofits on package readPanu Matilainen1-4/+7
- Missing RPMTAG_DIRNAME can mean either a package with uncompressed filenames OR a new package with no files, in which case the retrofits should not be performed. Also a newer package can be built with --nodirtokens, requiring filelist compression but no other retrofits. - Test for immutable region presence for more accurate v3 package detection, if not present do a full retrofit. For others, explicitly test for OLDFILENAMES presence and only compress the filelist if needed.e
2012-09-14Switch rpmdb basename finding to use pool id's instead of stringsPanu Matilainen1-8/+19
- Ids are both faster to hash/compare and cheaper to store than string pointers. Not a huge win but a win anyway...
2012-09-14Cleanup + optimize doLookupId() a bitPanu Matilainen1-7/+3
- Eliminate redundant second strlen() on dirName on entry, and avoid the first one as well by grabbing the length from pool instead. - Reorganize the initializations and declarations a bit for clarity.
2012-09-14Remove leftover variable from previous commitPanu Matilainen1-1/+0
- Should've been in commit 1770fca303c5c5abdb27040649b458b59494823
2012-09-14Change fpLookupList() to operate on pool id's onlyPanu Matilainen1-7/+10
2012-09-14Do the low-level fingerprint lookup based on pool id argumentsPanu Matilainen1-3/+13
- When at all possible, we'd prefer working on id's instead of actual strings, change the lowest-level fingerprint lookup to use those, doLookup() is now just a wrapper to handle string -> pool id conversion before doing the actual work. This shouldn't affect anything at all yet.
2012-09-14Switch fingerprinting to use the global string poolPanu Matilainen1-4/+1
- Transaction preparation fingerprinting now shares all the strings from rpmfi's etc. Rpmdb basename iterator still needs a private pool as there's nowhere to get a pool handle (for now at least). - We no longer need to (and actually we couldn't) freeze the pool before fingerprinting.
2012-09-14Allow passing a shared pool for finger print cachePanu Matilainen4-5/+6
- Both callers updated to still use a private pool so no practical change here.
2012-09-14Remove scareMemory remnants from the internal API, fixup callersPanu Matilainen4-6/+4
2012-09-14Switch fingerprint subDir to pool idsPanu Matilainen1-46/+47
- <gulp> but no anomalies noted by test-suite, valgrind or a bit of manual testing. Time will tell... - Memory is no longer scarce or scary, the strings are simply owned by the pool in all circumstances. Eliminate scareMemory foobar from the fingerprinting internals.
2012-09-14Switch fingerprint basename to pool idsPanu Matilainen1-9/+16
- For now we're doing a fair amount of extra work and wasting memory as data is in different pools so we need to copy to get the strings and ids into our private pool. This will go away later.
2012-09-14Switch fingerprint cache-entry dirnames to pool idsPanu Matilainen1-17/+28
- This is fairly straightforward (or supposed to be...) especially now that its all hidden behind APIs. Note that we no longer bother precalculating the hash as a pool-id's hash is a no-cost operation, for strings it was far more expensive.
2012-09-14Add a string pool to fingerprint cache (but not yet used)Panu Matilainen1-0/+3
2012-09-14Make fingerprint struct opaque outside fprint.cPanu Matilainen5-34/+37
- rpmfi cannot know anything about the storage, so rpmfiFpxIndex() cannot be... change it to rpmfiFps() which only returns the pointer we got from fpLookupList() - Change fpCacheGetByFp() to assume it gets passed an array of fps, and take an additional index argument. Return the fingerprint pointer on success, NULL on not found to allow further operations on the fp without knowing its internals.
2012-09-14Change fpLookup() to return malloced memory (on first call)Panu Matilainen4-16/+20
- If the fingerprint pointer passed to it is NULL then allocate space for a new fingerprint, otherwise reuse the previous space. This should allow optimizing the case where repeatedly calling and directory doesn't change inside fpc so callers dont need special-case code for this. For now, we dont care about optimizations, other than making it possible later.
2012-09-14Make fingerprint cache entry opaque, add some kind of API for the needed bitsPanu Matilainen3-14/+30
- Only disk-space calculations need the actual entry contents, add getter for dir name and device. We're passing the cache to these getters too: its not currently unusedd but will be needed for directory name pool id->string translation once we get there...
2012-09-14Hide away the FP_EQUAL macrosPanu Matilainen2-12/+10
2012-09-14Change fpLookupList() to return malloced memoryPanu Matilainen3-13/+14
- Eliminates one place where knowledge about fingerprint internals has been needed, now rpmfi just gets (an supposedly) opaque blob back.
2012-09-14Add internal API for fingerprint lookup-and-comparePanu Matilainen3-4/+15
- Replace the direct hackery in rpmdb internals with a little less direct hackery...
2012-09-14Bury the fingerprint hash-types into fprint.c, clean upPanu Matilainen3-46/+25
- fprint.h only needs rpmtypes.h now, remove historical leftovers - Avoids having to define the hash types multiple times as they're now buried out of sight - fpHashFunction() and fpLookupSubdir() can now be made static, do so...
2012-09-14Move the entire fingerprint cache population into fprint.cPanu Matilainen3-67/+76
- Rename addFingerprints() to fpCachePopulate() and move into fprint.c. This doesn't really belong here as it requires fprint becoming aware of transactions and all, but at least these are all controlled API accesses unlike where in transaction.c this was messing with somebody elses data structures directly. - Move the by-fingerprint creation to fpCachePopulate() so it gets lazily done as needed and copy the original hash-size heuristics back here.
2012-09-14Hide by-fingerprint hash into fingerprint cache, add minimal API bitsPanu Matilainen3-18/+29
- For now, always create the by-fingerprint hash although rpmdb usage doesn't need it. Next steps will fix... - Add wrapper API for retrieving the records, adjust callers - No functional changes, at least intended ones... just first steps towards eliminating the hash-jungle and forcing a single API through which this stuff gets handled
2012-09-14Make fingerprint cache opaque outside fprint.cPanu Matilainen2-7/+7
- Not that it matters much when everything else is wide open but gotta start with something...
2012-09-13Convert our dependency checking code to use the new rpmdsMatches()Panu Matilainen2-10/+17
- Instead of adding three more pool-aware versions of the old API's, convert the main callers to the newew more flexible API. As a "minor side-effect" these now use the transaction string-pool as well, so ALL our pre-transaction dependency sets are now using the global pool.
2012-09-13Unify the three rpmdsFooMatchesDep() functions into onePanu Matilainen2-36/+46
- These all do more or less the same thing, easily handled with a common function that takes a couple of more extra parameters. The old variants become just wrappers to call the pool-aware rpmdsMatches() with suitable arguments.
2012-09-13Use transaction string pool for rpmlib() dependencies tooPanu Matilainen1-1/+1
- This wasn't possible with the former static rpmlib() dependency set as it would've kept the potentially huge global pool referenced throughout process lifetime.
2012-09-13Add pool-aware version of rpmdsRpmlib()Panu Matilainen2-3/+18
2012-09-13Hang rpmlib() dependency set onto transaction setPanu Matilainen3-7/+5
- Eliminates the cumbersome static rpmlib ds instance which can never be freed, as a member of the transaction set it simply gets cleaned out along with other transaction (dependency) data.