diff options
| author | merakor <cem@ckyln.com> | 2021-10-27 16:39:40 +0000 | 
|---|---|---|
| committer | merakor <cem@ckyln.com> | 2021-10-27 16:39:40 +0000 | 
| commit | 5f89b67931ee91eefc1fee6310cf3ac84a79c252 (patch) | |
| tree | 0524a0f9776802ec867226db7efcaff0a2e895cc | |
| parent | 200804e9211bac324e04fad3a41c115a60faa36f (diff) | |
| download | cpt-update-exec.tar.gz | |
pkg_updates(): make cpt-update reentrantupdate-exec
FossilOrigin-Name: 9fb03426892c0300768265a3199536fa8da89a58f5d3d7228dbb84cb534cb6e8
| -rw-r--r-- | src/cpt-lib.in | 35 | 
1 files changed, 23 insertions, 12 deletions
diff --git a/src/cpt-lib.in b/src/cpt-lib.in index 581d281..e2581a0 100644 --- a/src/cpt-lib.in +++ b/src/cpt-lib.in @@ -1941,7 +1941,12 @@ pkg_updates(){      # an update.      [ "$CPT_FETCH" = 0 ] || pkg_fetch -    log "Checking for new package versions" +    # Be quiet if we are doing self update, no need to print the same +    # information twice. We add this basic function, because we will be using it +    # more than once. +    _not_update () { [ "$cpt_self_update" ] || "$@" ;} + +    _not_update log "Checking for new package versions"      set +f @@ -1955,7 +1960,7 @@ pkg_updates(){          # Compare installed packages to repository packages.          [ "$db_ver-$db_rel" != "$re_ver-$re_rel" ] && { -            printf '%s\n' "$pkg_name $db_ver-$db_rel ==> $re_ver-$re_rel" +            _not_update printf '%s\n' "$pkg_name $db_ver-$db_rel ==> $re_ver-$re_rel"              outdated="$outdated$pkg_name "          }      done @@ -1976,6 +1981,13 @@ pkg_updates(){          exit 0      } +    [ "$outdated" ] || { +        log "Everything is up to date" +        return +    } + +    _not_update log "Packages to update: ${outdated% }" +      contains "$outdated" cpt && {          log "Detected package manager update"          log "The package manager will be updated first" @@ -1986,18 +1998,17 @@ pkg_updates(){          cpt-install cpt          log "Updated the package manager" -        log "Re-run 'cpt update' to update your system" - -        exit 0 +        log "Re-executing the package manager to continue the update" + +        # We export this variable so that cpt knows it's running for the second +        # time. We make the new process promptless, and we avoid fetching +        # repositories. We are assuming that the user was already prompted once, +        # and that their repositories are up to date, or they have also passed +        # the '-y' or '-n' flags themselves which leads to the same outcome. +        export cpt_self_update=1 +        exec cpt-update -yn      } -    [ "$outdated" ] || { -        log "Everything is up to date" -        return -    } - -    log "Packages to update: ${outdated% }" -      # Tell 'pkg_build' to always prompt before build.      pkg_update=1  | 
