summaryrefslogtreecommitdiff
path: root/lib/libalpm
Commit message (Collapse)AuthorAge
* download: major refactor to address lingering issuesDan McGee2009-11-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sorry for this being such a huge patch, but I believe it is necessary for quite a few reasons which I will attempt to explain herein. I've been mulling this over for a while, but wasn't super happy with making the download interface more complex. Instead, if we carefully order things in the internal download code, we can actually make the interface simpler. 1. FS#15657 - This involves `name.db.tar.gz.part` files being left around the filesystem, and then causing all sorts of issues when someone attempts to rerun the operation they canceled. We need to ensure that if we resume a download, we are resuming it on exactly the same file; if we cannot be almost postive of that then we need to start over. 2. http://www.mail-archive.com/pacman-dev@archlinux.org/msg03536.html - Here we have a lighttpd bug to ruin the day. If we send both a Range: header and If-Modified-Since: header across the wire in a GET request, lighttpd doesn't do what we want in several cases. If the file hadn't been modified, it returns a '304 Not Modified' instead of a '206 Partial Content'. We need to do a stat (e.g. HEAD in HTTP terms) operation here, and the proceed accordingly based off the values we get back from it. 3. The mtime stuff was rather ugly, and relied on the called function to write back to a passed in reference, which isn't the greatest. Instead, use the power of the filesystem to contain this info. Every file downloaded internally is now carefully timestamped with the remote file time. This should allow the resume logic to work. In order to guarantee this, we need to implement a signal handler that catches interrupts, notifies the running code, and causes it to set the mtimes on the file. It then rethrows the signal so the pacman signal handler (or any frontend) works as expected. 4. We did a lot of funky stuff in trying to track the DB last modified time. It is a lot easier to just keep the downloaded DB file around and track the time on that rather than in a funky dot file. It also kills a lot of code. 5. For GPG verification of the databases down the road, we are going to need the DB file around for at least a short bit of time anyway, so this gets us closer to that. Signed-off-by: Dan McGee <dan@archlinux.org> [Xav: fixed printf with off_t] Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
* Refactor do/while cycle and multiple while cyclesLaszlo Papp2009-11-15
| | | | | | | | * It makes the code clearer to read/understand * Cppcheck tool doesn't show this anymore: [./util.c:215]: (error) Resource leak: fd [Dan: don't change the coding style] Signed-off-by: Dan McGee <dan@archlinux.org>
* Add Catalan translationManuel Tortosa2009-11-15
| | | | Signed-off-by: Dan McGee <dan@archlinux.org>
* Merge branch 'maint'Dan McGee2009-11-10
|\
| * Fix opendir error condition checksDan McGee2009-10-27
| | | | | | | | | | | | | | | | | | | | Thanks to Laszlo Papp <djszapi@archlinux.us> for the following catch: opendir(path)) == (DIR *)-1; is maybe the result of misunderstanding the manpage. If an opendir() call isn't successful it returns NULL rather than '(DIR *)-1'. Noticed-by: Laszlo Papp <djszapi@archlinux.us> Signed-off-by: Dan McGee <dan@archlinux.org>
* | Fix a small typo in alpm_list.cLaszlo Papp2009-10-24
| | | | | | | | | | Signed-off-by: Laszlo Papp <djszapi@archlinux.us> Signed-off-by: Dan McGee <dan@archlinux.org>
* | Reduce unnecessary get_name() function callsDan McGee2009-10-24
| | | | | | | | | | | | | | | | | | | | | | | | | | alpm_pkg_get_name() gives us little benefit in backend code besides a NULL check on the package passed in; we could do that ourself if necessary. By changing to direct references in the cases where we are sure we have a valid package, we save a function call each time we need a package name. This function can't be inlined because it is externally accessible. This cuts the calls to get_name() from 1.3 million times in a pacman -Qu operation to around 2400. Signed-off-by: Dan McGee <dan@archlinux.org>
* | dload.c : clear sigaction flag to make valgrind happyXavier Chantry2009-10-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes the following valgrind warning : ==26831== Syscall param rt_sigaction(act->sa_flags) points to uninitialised byte(s) ==26831== at 0x4282547: __libc_sigaction (in /lib/libc-2.10.1.so) ==26831== by 0x403C693: download_internal (dload.c:152) ==26831== by 0x403D0E4: _alpm_download_single_file (dload.c:311) ==26831== by 0x4033B72: alpm_db_update (be_files.c:319) ==26831== by 0x805205E: pacman_sync (sync.c:257) ==26831== by 0x804EE54: main (pacman.c:1120) ==26831== Address 0xbec6cc04 is on thread 1's stack ==26831== ==26831== Syscall param rt_sigaction(act->sa_restorer) points to uninitialised byte(s) ==26831== at 0x4282547: __libc_sigaction (in /lib/libc-2.10.1.so) ==26831== by 0x403C693: download_internal (dload.c:152) ==26831== by 0x403D0E4: _alpm_download_single_file (dload.c:311) ==26831== by 0x4033B72: alpm_db_update (be_files.c:319) ==26831== by 0x805205E: pacman_sync (sync.c:257) ==26831== by 0x804EE54: main (pacman.c:1120) ==26831== Address 0xbec6cc08 is on thread 1's stack ==26831== Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
* | Size handling was changed in fgets() functionsLaszlo Papp2009-10-19
| | | | | | | | | | | | | | | | Pacman's fgets function in the API used hardcoded numbers to identify the size. This is not good practice, so replace them with sizeof handling. Signed-off-by: Laszlo Papp <djszapi@archlinux.us> Signed-off-by: Dan McGee <dan@archlinux.org>
* | use bitwise shift operator in enum "bit field"solsTiCe d'Hiver2009-10-11
| | | | | | | | | | | | | | | | This offers a cleaner way to deal with constant in enum and allow easy maintainance Signed-off-by: solsTiCe d'Hiver <solstice.dhiver@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
* | Fix "-Sd conflict_pkg" bugNagy Gabor2009-10-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the -d switch was invoked with -S (or -U), the removes list was simply lost, because trans->remove was computed in an "if(!(trans->flags & PM_TRANS_FLAG_NODEPS))" block. I've added a new pactest file, sync045.py (derived from sync043.py) to test this. Additionally, I did some other minor cleanups in sync_prepare: * preferred list is not needed anymore * I removed a needless alpm_list_remove_dupes line (the target list should not contain dupes at all) * I moved alpm_list_free(remove); to cleanup part to eliminate a possible memleak Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu> Signed-off-by: Dan McGee <dan@archlinux.org>
* | alpm_list : add new alpm_list_diff_sorted functionXavier Chantry2009-10-11
| | | | | | | | | | | | | | | | | | | | | | | | This is more efficient than alpm_list_diff since it assumes the two lists are sorted. And also we get the two sides of the diff. Even sorting should more efficient than the current list_diff. Sorting the two lists should be O(n*log(n)+m*log(m)) while the current list_diff is O(n*m). So I also reimplemented list_diff using list_diff_sorted. Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
* | Rework the alpm_unpack functionsXavier Chantry2009-10-11
| | | | | | | | | | | | | | Add support to extract a list of entries Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
* | cygwin fix : use unsigned char for ctype functionXavier Chantry2009-10-11
| | | | | | | | | | | | | | | | | | | | | | | | See http://www.nabble.com/-PATCH-RFA--Distinguish-between-EOF-and-character-with-value-0xff-td23161772.html#a23188494 cygwin 1.7 actually displays a warning when using signed char with the ctype function, so that compilation fails when using -Wall -Werror. So we just cast all arguments to unsigned char. Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
* | libalpm: clean up lock functionDan McGee2009-10-11
| | | | | | | | | | | | | | We were doing a lot of manual work; leverage the standard library a bit to do more for us. Signed-off-by: Dan McGee <dan@archlinux.org>
* | Reduce calls to list_count() in removing packageDan McGee2009-10-11
| | | | | | | | | | | | | | | | We don't need to count the number of packages left once per file when removing; we only need to do it once per package. Also move a variable into the correct scope. Signed-off-by: Dan McGee <dan@archlinux.org>
* | Add missing get_usedelta() methodDan McGee2009-10-11
| | | | | | | | Signed-off-by: Dan McGee <dan@archlinux.org>
* | typing: a few more fixes for special int typesDan McGee2009-10-11
| | | | | | | | Signed-off-by: Dan McGee <dan@archlinux.org>
* | int typing: s/unsigned short/int/ in libalpmDan McGee2009-10-11
| | | | | | | | | | | | | | | | | | | | After our recent screwup with size_t and ssize_t in the download code, I found the `-Wsign-conversion` flag to GCC to see if we were doing anything else boneheaded. I didn't find anything quite as bad, but we did have some goofups- most of our public unsigned methods would return -1 on error, which is a bit odd in an unsigned context. Signed-off-by: Dan McGee <dan@archlinux.org>
* | Merge branch 'maint'Dan McGee2009-10-11
|\|
| * alpm_list : fix a bug in alpm_list_removeXavier Chantry2009-10-11
| | | | | | | | | | | | | | A NULL list element triggered an infinite loop. Not cool :) Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
| * Update Chinese translation甘露(Lu.Gan)2009-10-11
| | | | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
| * Update Swedish translationChristian Larsson2009-10-07
| | | | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
| * Update chinese translation甘露(Lu.Gan)2009-10-07
| | | | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
| * New Greek translationXavier Chantry2009-10-07
| | | | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
| * Update translationsXavier Chantry2009-10-07
| | | | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
| * Update all pot and po files for 3.3.2 releaseXavier Chantry2009-10-07
| | | | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
* | Merge branch 'maint'Dan McGee2009-09-29
|\| | | | | | | | | Conflicts: lib/libalpm/dload.c
| * dload : fix infinite download (big type mistake)Xavier Chantry2009-09-29
| | | | | | | | | | | | | | | | | | | | | | fetchIO_read returns -1 in case of error, and the return type is ssize_t, not size_t ! So we converted -1 to an unsigned, which led to huge file write. The rest is just changing the error return a bit. Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
* | Merge branch 'maint'Dan McGee2009-09-22
|\|
| * Clean up translation file headersDan McGee2009-09-22
| | | | | | | | | | | | | | Get them a bit more standardized across the board, as they were quite a mess. Also note the two new translations we received for 3.3.1. Signed-off-by: Dan McGee <dan@archlinux.org>
| * Add Swedish translationLaszlo Papp2009-09-22
| | | | | | | | | | | | | | | | | | | | This is for 3.3.0, not for 3.3.1. But since there are only like 10 messages missing, it seems worth including now. Signed-off-by: Christian Larsson <congacx@gmail.com> Signed-off-by: Laszlo Papp <djszapi2@archlinux.us> [Dan: fix some busted translation strings] Signed-off-by: Dan McGee <dan@archlinux.org>
| * Update Czech translationOndrej Kucera2009-09-23
| | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
| * Update Brazilian translationRodrigo Flores2009-09-22
| | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
| * Add Norwegian translationLaszlo Papp2009-09-21
| | | | | | | | | | | | Signed-off-by: Hans-Kristian Arntzen <maister@archlinux.us> Signed-off-by: Laszlo Papp <djszapi@archlinux.us> Signed-off-by: Dan McGee <dan@archlinux.org>
| * Update Polish translationMateusz Herych2009-09-20
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
* | Fully implement database lazy loadingDan McGee2009-09-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 34e1413d75 attempted to implement lazy loading of package databases. Although it took care of my main complaint (creating the database directory if it didn't exist), it didn't allow sync repos to be registered before alpm_option_set_dbpath() had been called. With this patch, we no longer compute the individual repository DB paths until necessary, allowing full lazy loading to work as intended, and allowing us to drop the extra setlibpath() calls from the frontend. This allows the changes introduced in a2cd48960 (but later reverted) to be added back in again. Signed-off-by: Dan McGee <dan@archlinux.org>
* | Merge branch 'maint'Dan McGee2009-09-20
|\| | | | | | | | | | | | | | | Message updates made this one a bit messy, but nothing too bad. Conflicts: lib/libalpm/add.c lib/libalpm/remove.c
| * Update Italian translationGiovanni Scafora2009-09-18
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
| * Update Ukrainian translationRoman Kyrylych2009-09-18
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
| * Update Turkish translationSamed Beyribey2009-09-18
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
| * Update Spanish translationJuan Pablo González Tognarelli2009-09-18
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
| * Update Russian translationSergey Tereschenko2009-09-18
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
| * Update Romanian translationVolodia Macovei2009-09-18
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
| * Update Kazakh translationBaurzhan Muftakhidinov2009-09-18
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
| * Update Hungarian translationNagy Gabor2009-09-18
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
| * Update German translationMatthias Gorissen2009-09-18
| | | | | | | | Signed-off-by: Giovanni Scafora <giovanni@archlinux.org>
| * Update en_GB translationDan McGee2009-09-16
| | | | | | | | Signed-off-by: Dan McGee <dan@archlinux.org>
| * Update french translationXavier Chantry2009-09-16
| | | | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
| * Update all pot and po files for 3.3.1 releaseXavier Chantry2009-09-16
| | | | | | | | | | Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>