From a9baeb490600c1e0a64cfc1e193cc6c145327c21 Mon Sep 17 00:00:00 2001 From: Steve Youngs Date: Mon, 10 Mar 2014 19:09:43 +1000 Subject: [PATCH] Try to make it easier for when I update the build script template. It's most likely incredibly hacky, but this changeset gives a pkgusr a way to incrementally and interactively apply updates to their build script when the central template script in /etc/pkgusr/skel-package is updated. If the central template script is newer than the pkgusr's a notice is printed to their stdout on login that contains further instructions of how to proceed. The actual updating is done via #'ediff-files in an interactive SXEmacs session. That way the pkgusr can "cherrypick" the changes. * lisp/bld-update.el: New. Update build scripts via ediff. * etc/pkgusr/handy_funcs (build-update): New. Calls SXEmacs with ediff-files on ~/build and /etc/pkgusr/skel-package/build (checkupdates): Checks to see if the build script in /etc/pkgusr/skel-package is newer than the one in $HOME * etc/pkgusr/bash_profile (CHECKUPDATES): New. Signed-off-by: Steve Youngs --- etc/pkgusr/bash_profile | 16 ++++++++++- etc/pkgusr/handy_funcs | 35 ++++++++++++++++++++++++ lisp/bld-update.el | 59 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 lisp/bld-update.el diff --git a/etc/pkgusr/bash_profile b/etc/pkgusr/bash_profile index 5f1a4f8..52d885e 100644 --- a/etc/pkgusr/bash_profile +++ b/etc/pkgusr/bash_profile @@ -45,9 +45,18 @@ unset _XORG _KDE _QT _PKGCFG # rationale. SUPPRESSLOCALEDIR=1 +## Build script update checks +# If this is set to `1' (one) a check is done to see if there is a +# newer build script available that the pkgusr could update to. If an +# update is available a message is printed to stdout with instructions +# of how to proceed. +# +# Override this in ~/.pkgusrrc. +CHECKUPDATES=1 + ### export everything export LC_ALL PATH LESS LESSCHARSET LESSOPEN TZ PKG_CONFIG_PATH QTDIR -export SUPPRESSLOCALEDIR +export SUPPRESSLOCALEDIR CHECKUPDATES # Make prompt reflect that we are a package user. export PROMPT_COMMAND='PS1="[pkgusr (\u)] \w> "' @@ -63,6 +72,11 @@ fi # Go to the home directory whenever we su to a package user. cd +# Maybe check if the build script can be updated. +if [ ${CHECKUPDATES} -eq 1 ]; then + checkupdates +fi + # Local variables: # sh-basic-offset: 4 diff --git a/etc/pkgusr/handy_funcs b/etc/pkgusr/handy_funcs index dd812b5..ea59623 100644 --- a/etc/pkgusr/handy_funcs +++ b/etc/pkgusr/handy_funcs @@ -187,6 +187,41 @@ find_pkg_deps() done|sort -u|tr -s '\n' ' ' } +## Check if there is a newer build script, maybe update. +# NOTE: Updating needs SXEmacs. It'll work in XEmacs and Emacs too, +# but you'll need to change build-update() accordingly. +build-update() +{ + if [ -x $(type -p sxemacs) ]; then + sxemacs -l /etc/pkgusr/bld-update.el + fi +} + +checkupdates() +{ + local sysb=/etc/pkgusr/skel-package/build + local pkgb=${HOME}/build + local sysbv=$(${sysb} -V|awk '/build:/ {print $2;}') + local pkgbv=$(${pkgb} -V|awk '/build:/ {print $2;}') + + if [ ${sysb} -nt ${pkgb} ]; then + echo '*****************************************' + echo '* *' + echo '* B u i l d S c r i p t U p d a t e *' + echo '* A v a i l a b l e *' + echo '* *' + echo '*****************************************' + echo ' Your version:' ${pkgbv} + echo ' Available Version:' ${sysbv} + echo + echo 'For a SXEmacs based interactive update, run: "build-update"' + echo 'To turn this notice off, set $CHECKUPDATES to: "0"' + echo + echo -n 'Press [RETURN] to continue...' + read junk + fi +} + ## Aliases # Repos/Websites alias srepo='grep --colour Repo_Location:.*$ ${HOME}/.project' diff --git a/lisp/bld-update.el b/lisp/bld-update.el new file mode 100644 index 0000000..531ebd9 --- /dev/null +++ b/lisp/bld-update.el @@ -0,0 +1,59 @@ +;; bld-update.el --- Update pkgusr build scripts via ediff -*- Emacs-Lisp -*- + +;; Copyright (C) 2014 Steve Youngs + +;; Author: Steve Youngs +;; Maintainer: Steve Youngs +;; Created: <2014-03-10> +;; Time-stamp: + +;; This file is part of pkgusr. + +;; Redistribution and use in source and binary forms, with or without +;; modification, are permitted provided that the following conditions +;; are met: +;; +;; 1. Redistributions of source code must retain the above copyright +;; notice, this list of conditions and the following disclaimer. +;; +;; 2. Redistributions in binary form must reproduce the above copyright +;; notice, this list of conditions and the following disclaimer in the +;; documentation and/or other materials provided with the distribution. +;; +;; 3. Neither the name of the author nor the names of any contributors +;; may be used to endorse or promote products derived from this +;; software without specific prior written permission. +;; +;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR +;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;; DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +;; BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +;; OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +;; IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +;;; Commentary: +;; +;; Just calls #'ediff-files to update build scripts. Probably way +;; over the top, but it is the best and easiest way I know of to +;; incrementally and interactively apply a diff. + +;;; Code: +(require 'ediff) +(defvar pkgusr-build-script + (expand-file-name "build" (user-home-directory)) + "The pkgusr's build script.") + +(defvar system-build-script + (expand-file-name "build" + (paths-construct-path + (list "/etc" "pkgusr" "skel-package"))) + "The build script new pkgusrs get.") + +(ediff-files pkgusr-build-script system-build-script) + +;;; bld-update.el ends here -- 2.25.1