Script to set/unset "automatic" status in PKGNG database

看板FB_current作者時間13年前 (2012/09/08 14:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串9/10 (看更多)
--Apple-Mail=_730A9CF5-445A-45DA-ADDA-BCD1351C8486 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii I today noticed the "pkg autoremove" command for the first time, which = does much the same thing as pkg_cutleaves but relies on the "automatic" = flag in the pkgng database rather than user input to determine which = "leaf" ports can be removed. Unfortunately, the pkg2ng utility has no = way of knowing which old-style packages it converts were installed = automatically as dependencies, so they are all marked as non-automatic = (i.e. user-requested). In my case, this was not true for the majority of = installed ports. Since I really like this functionality, I decided to = update my local package database to match my preferences. Having succeeded, I decided a tool to make doing so easy could well = benefit others (as well as my future self). (Plus I wanted an excuse to = play with dialog(1) and "pkg query" a bit.) So here's the result. I'm = not too attached to the name. It shouldn't eat your package database or = steal your lunch money, but I'm not responsible if it does. Other than = that, feedback is welcome. JN --Apple-Mail=_730A9CF5-445A-45DA-ADDA-BCD1351C8486 Content-Disposition: attachment; filename=set_pkg_auto.sh.txt Content-Type: text/plain; name="set_pkg_auto.sh.txt" Content-Transfer-Encoding: quoted-printable #!/bin/sh # Copyright (c) 2012 John Nielsen <john@jnielsen.net> # This script presents a checklist of all PKGNG packages registered on # the system, showing for each whether or not it is marked as = "automatic" # (i.e. not explicitly requested by the user). Any changes are recorded # in the PKGNG database. I wrote it to make "pkg autoremove" useful # following a pkg2ng migration, but other uses are conceivable. # The PKGNG database file to use DB=3D/var/db/pkg/local.sqlite # Terminal geometry sz=3D`stty size` rows=3D`echo ${sz} | cut -d ' ' -f 1` cols=3D`echo ${sz} | cut -d ' ' -f 2` drows=3D$(( ${rows} - 3 )) dcols=3D$(( ${cols} - 6 )) # Dialog results are stored here tmpfile=3D`mktemp -t set_pkg_auto` # We always want the same style checklist export DIALOGOPTS=3D"--extra-button --extra-label \"Select All\" = --cancel-label \"Deselect All\" --help-button --help-label Exit = --separator ," # Exit with an error message die() { rm -f ${tmpfile} echo "${1}" exit 1 } # Don't leave tmpfile behind even if we are killed/interrupted trap "die \"Interrupt received.\"" 2 15 # Run dialog to present the checklist and save the results in tmpfile run_dialog() { dialog --checklist "Select packages to consider for = auto-removal" ${drows} ${dcols} ${drows} $* 2>${tmpfile} return $? } # Show the current status from the package database in the checklist select_current() { run_dialog `pkg query '%n %o %a' | sed -e 's/1$/on/g' -e = 's/0$/off/g'` return $? } # Select all packages in the checklist select_all() { run_dialog `pkg query '%n %o' | sed -e 's/$/ on/g'` return $? } # De-select all packages in the checklist select_none() { run_dialog `pkg query '%n %o' | sed -e 's/$/ off/g'` return $? } # Update the package database to match selections in the specified file do_update() { autopkgs=3D`sed -e "s/^,//g" -e "s/\"/'/g" ${1}` sqlite3 ${DB} "update packages set automatic=3D1 where name in = (${autopkgs});" \ || die "SQlite error." sqlite3 ${DB} "update packages set automatic=3D0 where name not = in (${autopkgs});" \ || die "SQlite error." } # Run select_current for the first checklist pkgset=3Dcurrent # Show the checklist until "OK" or "Exit" is selected while : ; do select_${pkgset} case $? in 0) # OK, continue with updates break; ;; 3) # Extra (Select all), show the checklist again pkgset=3Dall ;; 1) # Cancel (Deselect all), show the checklist again pkgset=3Dnone ;; *) # 4-Help (Exit) or ESC or error, exit. die "No changes made." ;; esac done # If we got this far then tmpfile has a list of 'automatic' packages do_update ${tmpfile} # Clean up rm -f ${tmpfile} echo "Updated successfully." --Apple-Mail=_730A9CF5-445A-45DA-ADDA-BCD1351C8486 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_730A9CF5-445A-45DA-ADDA-BCD1351C8486 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org" --Apple-Mail=_730A9CF5-445A-45DA-ADDA-BCD1351C8486--
文章代碼(AID): #1GIjyhxX (FB_current)
討論串 (同標題文章)
完整討論串 (本文為第 9 之 10 篇):
文章代碼(AID): #1GIjyhxX (FB_current)