Upon failing to unlock the database, pacman -Su provides a useful tip
related to unlocking it by deleting /var/lib/pacman/db.lck if it already
exists.
This fixes pacman -Syu to provide the same tip upon failing to lock.

Signed-off-by: Ashok Gautham Jadatharan <[email protected]>
---
 src/pacman/util.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/pacman/util.c b/src/pacman/util.c
index 0f50ae0b..d3422739 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -152,12 +152,25 @@ int sync_syncdbs(int level, alpm_list_t *syncs)
 {
        int ret;
        int force = (level < 2 ? 0 : 1);
+       alpm_errno_t err;
 
        multibar_move_completed_up(false);
        ret = alpm_db_update(config->handle, syncs, force);
+
        if(ret < 0) {
+               err = alpm_errno(config->handle);
                pm_printf(ALPM_LOG_ERROR, _("failed to synchronize all 
databases (%s)\n"),
-                       alpm_strerror(alpm_errno(config->handle)));
+                       alpm_strerror(err));
+
+               if(err == ALPM_ERR_HANDLE_LOCK) {
+                       const char *lockfile = 
alpm_option_get_lockfile(config->handle);
+                       pm_printf(ALPM_LOG_ERROR, _("could not lock database: 
%s\n"),
+                                               strerror(errno));
+                       if(access(lockfile, F_OK) == 0) {
+                               fprintf(stderr, _("  if you're sure a package 
manager is not already\n"
+                                                       "  running, you can 
remove %s\n"), lockfile);
+                       }
+               }
        }
 
        return (ret >= 0);
-- 
2.34.1

Reply via email to