xbps-0.12.0 (???): * Massive pkgdb API rototill. The xbps-uhelper command gained support for the 'updatepkgdb' target which will migrate old pkgdb format to the new 0.12 format. ALERT: make sure to execute "xbps-uhelper -r updatepkgdb" to update to the new 0.12 pkgdb format before installing/removing/updating any package. * Repository index 1.4: the file is now externalized to a proplib array and has been renamed to "rindex.plist" to not break compatibility with previous XBPS versions. This helps in simplifying the API implementation substantially. * Added a pkg-config file to simplify writing code with libxbps. * libxbps: improved support for finding newest package versions available in repository pool. * libxbps: added support for finding exact package name/version matches in repository pool. * Fixed registering repositories with trailing '/' chars in configuration file: xbps.conf. * xbps-repo(8): the 'genindex' target now creates a plist file to cache all files provided by binary packages in a repository. This makes the 'find-files' target marginally faster, because this avoids having to fetch data from network in remote repositories. The new file 'index-files.plist' will be downloaded every time the 'sync' target is issued but only iff the file has been modified. This fixes Issue 21 "`xbps-repo find-files` is awfully slow". * It's now possible to fetch files thru xbps_fetch_file() from HTTP servers that don't set the Content-Length header. This fixes issue 19: "xbps-src cannot fetch source with unknown Content-Length" reported by ojab. * Renamed some options in xbps.conf to not have dashes, such as: fetch-timeout-connection -> FetchTimeoutConnection fetch-cache-connections-host -> FetchCacheConnections fetch-cache-connections-per-host -> FetchCacheConnectionsPerHost * Implemented memory caching for regpkgdb and configurable transaction flushing. Can be changed in xbps.conf with "TransactionFrequencyFlusing". By default set to 5. That means that every 5 packages processed in a transaction there will be a regpkgdb plist flush to disk. Setting it to 0 enables automatic mode which will only flush in two required points. Setting it to 1 makes the behaviour used in XBPS<=0.11, which flushed it on every package. That feature provides a 25% (and in some cases even more!) of performance when executing a transaction. * Merged purge code into remove. It wasn't necessary to have this splitted, so it now has been merged into xbps_remove_pkg(). That also means that '-p' flag in xbps-bin(8) and xbps-repo(8) doesn't exist anymore. * xbps-repo(8): the 'find-files' target accepts multiple patterns, such as: $ xbps-repo find-files /bin/cat '/bin/f*' ... * xbps-bin(8): the 'find-files' target accepts multiple patterns, such as: $ xbps-bin find-files /bin/cat '/bin/f*' ... * xbps-repo(8): the 'search' target accepts multiple patterns, such as: $ xbps-repo search 'foo-[0-9]*' '*blah*' ... * libxbps: more paranoid type checking and allocation results, to make sure that out of memory conditions are handled gracefully. xbps-0.11.0 (2011-12-20): * xbps-bin(8): it is possible now to reinstall a package even if it's installed with the '-f' option. If reinstalling the same package version, only unexistent files or files not matching its hash will be extracted. * While unpacking a binary package, always check that file to be extracted exists on filesystem, if true and its hash is matched, skip extraction. * While installing a package always preserve configuration files if they exist, but if hash don't match rename configuration files to .old. * New shared configuration file via libconfuse that replaces the plist configuration files: xbps.conf. That means that libxbps now requires confuse >= 2.7 available at http://www.nongnu.org/confuse/. * Support for syslog logging common operations, such as install, update, remove and purge via LOG_NOTICE, and errors with LOG_ERR. By default it's always enabled, can be disabled thru the conf file. * xbps-repo(8): new target: pkg-list [index]. This target will list all packages from repository with index [index]. If optional argument [index] (decimal) not set, all repositories will be used. * libxbps: when registering new packages, existing entries in requiredby matching the same pkgname/version touple are now simply skipped. * Repositories with missing index file are now simply ignored. It's expected that user executes 'xbps-repo sync' to fetch the index for all remote repositories specified in configuration file. * Faster binary package unpacking. Only files and symlinks are now extracted from binary packages, thus directories are not extracted anymore. The package builder is responsible to create required directories where appropiate and set correct permissions. While being here, some stuff is skipped now if a package uses the "preserve" keyword or package is being installed, resulting in a faster operation. * Implemented "New repository scheme and configuration file" from issue 16. The plist index file has been renamed to "index.plist", version bumped to 1.3. The configuration file (repositories.plist) now expect the full path to the directory storing the index.plist file. This will allow us to use other directories (such as non-free, or alike) for such purpose. * libxbps: improve xbps_purge_pkg() in case that the process was unexpectedly interrupted, do not error out unless the unregister phase returns an error value. * libxbps: when unpacking a package that replaced another package due to virtual packages, preserve its configuration files if they already existed. * xbps-bin(8)/xbps-repo(8): new flag '-o' (option). This can be used in the 'show' target to print only a set of objects stored in package's properties dictionary, example: $ xbps-bin -olicense show xbps Simplified BSD $ xbps-bin -oversion,build_date show xbps 0.10.1 Wednesday 26 October, 2011, 14:37:31 UTC $ * libxbpps: when fetching new pkg-index.plist from a repository, make sure that it's a plist file and can be internalized; otherwise remove downloaded file and return error. * xbps-bin(8): new test for the 'check' target to fix missing entries in requiredby array, i.e reverse dependencies in the package database plist. * xbps-bin(8): the 'check' target now works virtual packages. * libxbps: failed to properly match installed virtualpkgs that were dependencies in a transaction, therefore resulting in real packages being reinstalled and replacing installed virtual packages. xbps-0.10.1 (2011-10-26): * libxbps: fixed multiple free(3) calls in error paths (via closedir(3)) when some virtualpkg plist file couldn't be internalized. * xbps-bin(8): 'remove' with recursive flag (-R) now removes first the specified packages and puts its automatic dependencies at the tail of the array. * libxbps: xbps_pkgpattern_{name,version} now return expected pkgname/version if pattern is a shell wildcard pattern (fnmatch(3)). * libxbps: removed csh alternate code from the NetBSD's match code. We weren't using this code anyway and this only slowed down xbps_pkgpattern_match(). xbps-0.10.0 (2011-10-21): * Fixed issue 11 "xbps-bin fails to update properly some pkgs". http://code.google.com/p/xbps/issues/detail?id=11 * xbps-bin(8): the 'check' target now is able to detect if a package was installed manually and other packages are currently depending on it and change its mode to "automatic", i.e as dependency of those packages. * xbps-bin(8), xbps-repo(8): the -C flag now expects a path to a directory where the configuration files (conf.plist and repositories.plist) are stored. * New configuration scheme for virtual packages as defined in http://code.google.com/p/xbps/issues/detail?id=12 XBPS now reads all plist files in PREFIX/etc/xbps/virtualpkg.d.wants directory with settings for the wanted virtual packages. * New configuration scheme as defined in http://code.google.com/p/xbps/issues/detail?id=12 A directory to store XBPS configuration files is now used, by default set to PREFIX/etc/xbps. Configuration options are now set via conf.plist, and repositories in repositories.plist. * It is possible now to reinstall packages that provide virtual packages and put it back the original package, such as jpeg <-> libjpeg-turbo multiple times, without loosing important objects set when the original package was installed, i.e reverse dependencies and automatic installation. This is a requisite to really make a system that can be fully customizable and restored back to its original state with the virtual packages feature. * Fixed issue 10 "HTTP repositories in non standard HTTP port currently segfault". You can now use any HTTP server in non standard ports, such as: http://yourhost:8080/your/repo * xbps-bin(8): the 'check' target now detects broken symlinks and marks them as critical errors. * libxbps: when updating packages, only files that have been modified (compared to current installed file) are now unpacked. This should save some writes to storage and make the process a bit smoother as well. * Moved install transaction code to libxbps. The API has been extended with xbps_transaction_commit() which expects the transaction dictionary as its argument. This function will execute transaction tasks, like removing, updating, installing and configuring packages as defined in the transaction dictionary. * The 'cachedir' option in configuration file now can be changed to be relative to the rootdir if the first character is not '/'. The -c flag in xbps-bin(8) still expects a full path and if set, overrides the setting in configuration file. * xbps-bin(8): the 'show', 'show-deps' and 'show-revdeps' targets now work with virtual packages. * libxbps: fixed NetBSD's dewey matching code to properly identify that a version X.Y.Z should be greater than X.Y_Z. * libxbps: revamped virtual package handling. The public API find functions (xbps_find_pkg_*) don't know anything about virtual packages. To find virtual packages the xbps_find_virtualpkg_* functions must be used instead of the "classic" ones. * libxbps: the xbps_find_foo_in_array functions have been renamed to xbps_match_foo_in_array because its task is only matching against the provided package name, package pattern or string. xbps-0.9.1 (2011-07-15): * libxbps: xbps_repository_pool no longer loops forever if a package index plist file cannot be fetched due to network problems, or if the file is not available anymore; the repository will be ignored. * xbps-repo(8): the 'genindex' failed to register in pkg-index packages less than on equal than any other package providing the same package name. Ignore packages providing virtual packages. * xbps-repo(8): the 'genindex' target now removes entries in existent package index files for unexistent packages that were previously registered (removed, not enough permissions, etc). * xbps-repo(8): the 'genindex' target creates required directories in local repositories if it's necessary. * xbps-repo(8): the 'search' target now matches patterns in case insensitive mode. * A bug has been fixed while updating a package and another package providing a virtual package with a greater version was available in repositories. Only accept this if the virtual package is explicitly enabled in the "virtual-packages" section in the configuration file. xbps-0.9.0 (2011-07-08): * configure doesn't require a zlib package with a pkg-config file, to workaround some distribution that don't provide it (hi Ubuntu!). Rather it now checks for a required function. Fixes issue 6 in googlecode. * The configuration file now accepts a new option "fetch-timeout-connection", to specify the limit to wait (in seconds) of timed out connections when fetching files. It's set to 30 in configuration file, and if not set it also defaults to 30 seconds. * The configuration file now accepts new options to change rootdir (same than -r in xbps-bin(8)), cachedir (same than -c in xbps-bin(8)) and fetching cache connection limits. If settings are specified via the flags -r and -c in xbps-bin(8)/xbps-repo(8), they are prefered over the ones in the configuration file. * Fixed some bugs with virtual packages, to not adding duplicate package dictionaries in the transaction dictionary. * xbps-bin(8)/xbps-repo(8): the 'show-files' target now prints the target file on symlinks, i.e: "/sbin/foo -> /sbin/blah". * Changed the package pattern match code to the one available on NetBSD. It's much better and provides more alternative pattern matching options. * A new configuration file in plist format to specify repositories and virtual packages has been created, defaults to "/etc/xbps-conf.plist". That means that you no longer need to register/unregister repositories; just add your favourite local or remote repository and the first time XBPS needs to access the pkg-index file it will be downloaded. More options and properties will be added to the configuration file in the future. By default we use the official public remote repository, and "dcron" package for a cron daemon package. The ABI/API is not compatible anymore with previous versions, you've been advised :-) * xbps-bin(8): the 'check' target now also checks for modified symlinks, and warns if any of them has been modified. For this to work, the package metadata files.plist should contain the 'target' object in the 'links' array (created automatically by xbps-src since 20110531). * Improved repository package index format (v1.2). The index now contains all package objects, so that it's not necessary to fetch info from binpkgs. The file will also be a bit bigger, but not to worry about. xbps-0.8.1 (2011-05-27): * xbps-bin(8)/xbps-repo(8): more meaningful messages when a package couldn't be found in the show, show-deps and show-files targets, rather than exiting silently with only the error return value. * Added three new objects for the package props.plist metadata file to specify homepage, license and build date. * Minor improvements to the generation of API documentation. xbps-0.8.0 (2011-05-24): * xbps-bin(8): added -A and -M options, for setting package install reason to automatic or manual. Obviously both cannot be used togeter. * xbps-{bin,repo}(8): -c (cachedir) argument now is an absolute path and not relative to the root directory. * Fixed finally when a package should replace an installed package, but at the same time the package to be replaced also needs to be updated in the transaction. A real example: - sg3_utils-1.28 is currently installed. - Installed package udisks-1.0.2_1 depends on sg3_utils-1.28. - sg3_utils-1.28 has been splitted into libsgutils for 1.31, and libsgutils-1.31 has "replaces=sg3_utils<1.31". - udisks-1.0.2_2 depends on libsgutils-1.31. So now the old sg3_utils-1.28 package will be marked in its transaction object as "remove" and the new sg3_utils-1.31 package as "update". Therefore both packages (sg3_utils old/new) will be in the transaction but one will be removed and the other one updated. * Fixed a bug that made all registered repositories to fail when the first one couldn't be internalized in xbps_repository_pool_init(). * Added the concept of package properties in the API. At this moment only one property is fully working, "virtual". When xbps-bin(8) sets this property for a package, its virtual package list will be set in the XBPS_REGPKGDB plist in a package dictionary and the matching logic will always prefer its virtual packages over the real ones. You can do wonderful things with this, like always using development package versions, or simply customize what packages you want to install rather than the default ones. As a real example, you can now use the 'xbps-devel' package rather than the stable package version 'xbps' before installing the system and package dependencies will still be resolved: "$ xbps-bin set-prop virtual xbps-devel" "$ xbps-bin install xbps-base-system" Only packages that have the "provides" object are valid for the "virtual" property. * Moved the "replaces" handling logic into the API. But instead of removing any package, the packages that should be replaced are added into the transaction dictionary and marked as "remove". The frontend is responsible to install, update, configure and remove all packages by using the properties set in the transaction dictionary. * xbps-dgraph: now parses the "provides" object in the package properties metadata plist file for packages providing virtual packages. * xbps-bin(8): added -R option for the "remove" target, to recursively remove packages that were installed automatically by the package(s) that we want to remove, and no other package currently depends on. This is much like the remove and autoremove targets together, i.e "xbps-bin -yp remove foo && xbps-bin -yp autoremove". * xbps-bin(8): added -D option to only show the URLs to download the binary packages required by the "install", "update" and "autoupdate" targets. * xbps-bin(8): make the list target (without arguments) only show packages that are fully installed. Previously packages in unpacked state were also shown. * Added support for virtual packages. A virtual package is one that doesn't exist in the repository, but other packages can provide it. A new array in the package properties dictionary has been added to specify which virtual packages the package supports. As an example, the `rsyslog' package provides the virtual package `syslog-daemon-0'. Other packages can depend in `syslog-daemon>=0' and `rsyslog' will satisfy the dependency. * Merged the `progress_callback' branch that makes possible to specify a function callback to update progress while unpacking binary packages and while fetching files. xbps-bin(8) now lists current extract files with its size in bytes if -v flag is set. * Improved package dependency resolution in repositories by using a new function, xbps_repository_pool_find_pkg() that returns a package dictionary found in the first repository registered in the pool. It can also be used to find the newest version found in all registered repositories. * Improved package dependency sorting algorithm that uses less memory, it is 60% faster approximately and as bonus sorts all packages in the way they should be (previously the sorting was a bit different for packages with no run-time dependencies). * Many structural changes in the API. Made some stuff private and changed some function arguments in the API, the ABI is not compatible anymore with previous versions... anyway you shouldn't be using libxbps just yet. The API documentation has been modified to stay in sync with reality. xbps-0.7.3 (2011-01-16): * Fixed a bug that made libxbps fail to detect properly configuration files. This made all updates in configuration files to be lost. * It is now possible to properly build against an external portable proplib (with pkg-config support) and libfetch. * Enabled a bunch of compiler warnings in the configure script (if supported by the compiler), and made symbol visibility dependent of configure tests. * Added --silent argument to the configure script, hiding compilation details in the build process (disabled by default). xbps-0.7.2 (2010-12-28): * Fixed some memleaks in libxbps and its clients, found by valgrind. xbps-0.7.1 (2010-12-23): * xbps-dgraph: fixed small build error on x86 shown in buildbot tests. * libxbps: xbps_repository_pool_init(): don't loop forever if repository pkg-index.plist files cannot be internalized. * libxbps: xbps_fetch_file(): set a 30 seconds timeout for transfers. * xbps-repo(8): fixed the 'genindex' target for the API changes in 0.7.0. * xbps-uhelper: fixed the 'unregister' target for the API changes in 0.7.0. xbps-0.7.0 (2010-12-15): * xbps-repo(8): implemented the 'find-files' target to print which packages own a file, link, directory, etc. Analogue to the one implemented in xbps-bin(8). Works for local and remote repository, fetching info on-the-fly. * Fixed a typo in the configure script that broke detection of strlcat(), reported and patch provided by Min Sik Kim in issue 2. * xbps-bin(8): added -F flag for the remove target. Unless it's set, packages that are dependencies of other installed packages won't be removed. This flag overrides this behaviour and forces the package removal. * xbps-{bin,repo}(8): indent uniformly all lines while listing packages in xbps-bin or while searching for packages in xbps-repo. * xbps-repo(8): while searching for packages also try to find strings in the short description object. * xbps-{bin,repo}(8): added -d arg to enable debugging output to stderr. * While updating packages, obsolete directories are also removed when necessary. This helped to remove some empty dirs for python 2.6 > 2.7 update, just to mention a real example. * Cleaned up the API. Still not finished and there's a long way to have this finished and ready for public consumption. * xbps-dgraph: new utility to generate graphviz' dot(1) graphs for package metadata properties, such as dependencies, reverse dependencies, etc. Extracts the info from installed package metadata plist files. * Performance improvements in libxbps and all utilities, by avoiding unnecessary access(2) and chdir(2) calls while executing the INSTALL/REMOVE scripts at pre/post (de)install time. * Fixed some memleaks on libxbps found while working on the xbps-dgraph utility. xbps-0.6.2 (2010-10-31): * libxbps: xbps_repository_unregister(): in remote repositories, also remove the pkg index file and its directory. * libxbps: xbps_get_pkg_index_plist(): fixed a memleak. * xbps-bin(8): modify the 'list' target to accept an optional argument to list packages in the specified state, so that you can list packages that need to be purged, configured and broken (will be used in the future). * xbps-bin(8): added a new target 'find-files' to find which installed package(s) own a file. Exact matches "/bin/mount" or patterns "/usr/lib/libb[ao]b\*" can be specified. * When updating a package and removing obsolete files, don't forget to remove those directories if they were empty. xbps-0.6.1 (2010-10-23): * When replacing a package that is going to be updated in the transaction do not remove it, just overwrite its files and continue. The updated package will find that old files didn't match the SHA256 hash and will skip them. This solves the issue of new package updates requiring new dependencies with files that were previously stored in the old version. For example gtk+-2.20 containing gdk-pixbuf, and gtk+-2.22 requiring gdk-pixbuf externally. xbps-0.6.0 (2010-06-03): * Synced libfetch code with NetBSD pkgsrc, updated to 2.31. * libxbps: improved xbps_get_file_hash() to mmap(2) rather than read(2) the file we have to process. With mmap'ed files the hash can be processed 5x faster than before, or even more in some cases. * libxbps: switch to OpenSSL SHA256 implementation and remove the one previously used. It's faster and OpenSSL is required for libfetch so there is not point in using it. * Added strlcpy() and strlcat() from OpenBSD. Use them if they weren't found by the configure script on the system. * Added a configure script that emulates GNU autoconf but simplified, to simplify customization for build options, flags, etc. xbps-0.5.2.2 (2010-05-18): * libxbps: do not forget to reset a variable to 0 when removing obsolete files that are unexistent or its hash didn't match. xbps-0.5.2.1 (2010-05-18): * Due to human error, last fix in 0.5.2 was completely wrong and the INSTALL/REMOVE scripts were simply empty so ENOENT was returned, clearly this is expected and shouldn't be ignored. xbps-0.5.2 (2010-05-18): * libxbps: while running INSTALL/REMOVE scripts, do not fail if a script returns ENOENT but the script exists; that means the script did not match the expected action on its switch statement and the fact can be simply ignored. * libxbps: while upgrading packages and searching for obsolete files, do not remove the files that did not match previous SHA256 hash. Also, only remove obsolete dangling symlinks. * xbps-repo(8): fixed the 'genindex' target to not return error if any package is already registered in the index. * xbps-repo(8): improved the 'search' target to also match substrings in package/version tuples. xbps-0.5.1 (2010-05-12): * Fixed build issues in RHEL5, Ubuntu and others distributions. * libxbps: changed the epoch component in version strings to the ':' character to be differentiated from '-' in pkgname, and '_' in revision. * xbps-bin(8): added a new target 'show-orphans' that list all package orphans currently installed. * Removed asciidoc build dependency, simply use the troff manpages. xbps-0.5.0 (2010-05-01): * xbps-repo(8): fixed the 'search' target to also match patterns against its description, and not only from the package/version tuple. * Cleaned up the code by using the LLVM's clang static analyzer, found two possible NULL pointer dereferences in error branches and dead code. * xbps-bin(8): added new flag '-p' for the 'remove' and 'autoremove' targets, to also purge the package(s) after successful removal. * xbps-repo(8): print a warning when registering a repository that has been already added previously. * Add proplib-0.4.1 source and use it in XBPS. This is to avoid an external dependency, so that we depend on the features of the internal library. This also means that proplib is not required anymore. * Added support to read/write gzip compressed plists by default, thanks to proplib-0.4 that gained new functionality. xbps-0.4.1 (2010-02-28): * xbps-bin(8): fixed the install target to work with package names containing multiple '-', thus resulting in incorrect package name. [ https://bugs.launchpad.net/bugs/528212 ] * xbps-bin(8): fixed printing of incorrect message for packages containing the 'preserve' object in its props dictionary. [ https://bugs.launchpad.net/xbps/bugs/528216 ] xbps-0.4 (2010-02-01): * libxbps, xbps-bin(8), xbps-repo(8): redirect all warning and error messages to stderr. * libxbps: changes xbps_yesno() and xbps_noyes() to only accept "yes" or "no" (case insensitive) answers rather than 'y' or 'n', to avoid mistaken answers. * xbps-repo(8): added support to the 'search' target to find exact matches, i.e 'xbps-repo search bash'. * xbps-bin(8) added support to the 'install', 'remove' and 'update' targets to accept any arbitrary number of package names, i.e "xbps-bin install foo blah baz". See https://blueprints.launchpad.net/xbps/+spec/arbitrary-pkgname-args * xbps-bin(8): added support to the 'install' and 'update' targets to accept package patterns, i.e "xbps-bin install 'foo<=3.0'. See https://blueprints.launchpad.net/xbps/+spec/install-pkg-by-pkgmatch * libxbps: fixed some bugs while upgrading essential packages when new package didn't have an INSTALL or REMOVE script and old package had them. * libxbps: fixed some memleaks found by cppcheck and valgrind. * Makefiles reworked to support parallel builds. * libxbps: many exported functions to the API are now internal and not exported, because they were only used internally. The API is still not finished and may be changed without notice. * libxbps: be more strict finding required metadata plist files in binary packages. Now the code checks for the two required plist files to be at index <= 4 and doesn't write any entry to storage until they aren't found. * Added doxygen documentation for the API, enabled with BUILD_API_DOCS. * libxbps: synced libfetch code with NetBSD's pkgsrc, updated to 2.30. * xbps-bin(8): when downloading binary packages, it now sets default libfetch cache connection limits, thus reusing connections to the same host. * xbps-uhelper: the 'fetch' target now accepts an arbitrary number of arguments, and sets default libfetch cache connection limits. * xbps-bin(8): enable -f option for the 'purge' and 'remove' targets. If set, files will be removed even if its hash doesn't match for the 'remove' target, and configuration files for the 'purge' target. * libxbps: if updating a package, always overwrite files while unpacking; compare old and new files to remove obsoletes if necessary. This makes the "essential" object in package dictionary unnecessary, because all packages are treated as they were essential.