[pacman-dev] [PATCH v2] Improve advice for sync ops when db.lck is present
When the database is locked, sync operations involving transactions, such as pacman -Syy, show the following: :: Synchronizing package databases... error: failed to update core (unable to lock database) error: failed to update extra (unable to lock database) error: failed to update community (unable to lock database) error: failed to update multilib (unable to lock database) error: failed to synchronize any databases Whereas pacman -U <pkg> shows: error: failed to init transaction (unable to lock database) if you're sure a package manager is not already running, you can remove /var/lib/pacman/db.lck Which is much more meaningful, since the presence of db.lck may indicate an erroneous lockfile instead of an ongoing transaction. Improve the error messages for sync operations by advising the user to remove db.lck if he is sure that no package manager is running. Signed-off-by: Pang Yan Han <pangyanhan@gmail.com> --- src/pacman/sync.c | 1 + src/pacman/util.c | 22 +++++++++++++--------- src/pacman/util.h | 1 + 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/pacman/sync.c b/src/pacman/sync.c index e97da37..d553ba0 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -304,6 +304,7 @@ static int sync_synctree(int level, alpm_list_t *syncs) */ if(!success) { pm_fprintf(stderr, ALPM_LOG_ERROR, _("failed to synchronize any databases\n")); + trans_init_error(); } return (success > 0); } diff --git a/src/pacman/util.c b/src/pacman/util.c index 47fbaeb..599c18c 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -63,20 +63,24 @@ int trans_init(alpm_transflag_t flags, int check_valid) } if(ret == -1) { - enum _alpm_errno_t err = alpm_errno(config->handle); - pm_fprintf(stderr, ALPM_LOG_ERROR, _("failed to init transaction (%s)\n"), - alpm_strerror(err)); - if(err == ALPM_ERR_HANDLE_LOCK) { - fprintf(stderr, _(" if you're sure a package manager is not already\n" - " running, you can remove %s\n"), - alpm_option_get_lockfile(config->handle)); - } - + trans_init_error(); return -1; } return 0; } +void trans_init_error(void) +{ + enum _alpm_errno_t err = alpm_errno(config->handle); + pm_fprintf(stderr, ALPM_LOG_ERROR, _("failed to init transaction (%s)\n"), + alpm_strerror(err)); + if(err == ALPM_ERR_HANDLE_LOCK) { + fprintf(stderr, _(" if you're sure a package manager is not already\n" + " running, you can remove %s\n"), + alpm_option_get_lockfile(config->handle)); + } +} + int trans_release(void) { if(alpm_trans_release(config->handle) == -1) { diff --git a/src/pacman/util.h b/src/pacman/util.h index 6669847..6a26b08 100644 --- a/src/pacman/util.h +++ b/src/pacman/util.h @@ -39,6 +39,7 @@ /* update speed for the fill_progress based functions */ #define UPDATE_SPEED_SEC 0.2f +void trans_init_error(void); int trans_init(alpm_transflag_t flags, int check_valid); int trans_release(void); int needs_root(void); -- 1.7.6.1.385.gb7fcd0
On Mon, Aug 29, 2011 at 11:58 AM, Pang Yan Han <pangyanhan@gmail.com> wrote:
When the database is locked, sync operations involving transactions, such as pacman -Syy, show the following:
:: Synchronizing package databases... error: failed to update core (unable to lock database) error: failed to update extra (unable to lock database) error: failed to update community (unable to lock database) error: failed to update multilib (unable to lock database) error: failed to synchronize any databases
Whereas pacman -U <pkg> shows:
error: failed to init transaction (unable to lock database) if you're sure a package manager is not already running, you can remove /var/lib/pacman/db.lck
Which is much more meaningful, since the presence of db.lck may indicate an erroneous lockfile instead of an ongoing transaction.
Improve the error messages for sync operations by advising the user to remove db.lck if he is sure that no package manager is running.
Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
Thanks! Applied. -Dan
participants (2)
-
Dan McGee
-
Pang Yan Han