Try to make it easier for when I update the build script template.
authorSteve Youngs <steve@sxemacs.org>
Mon, 10 Mar 2014 09:09:43 +0000 (19:09 +1000)
committerSteve Youngs <steve@sxemacs.org>
Mon, 10 Mar 2014 09:09:43 +0000 (19:09 +1000)
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 <steve@sxemacs.org>
etc/pkgusr/bash_profile
etc/pkgusr/handy_funcs
lisp/bld-update.el [new file with mode: 0644]

index 5f1a4f8..52d885e 100644 (file)
@@ -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
index dd812b5..ea59623 100644 (file)
@@ -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 (file)
index 0000000..531ebd9
--- /dev/null
@@ -0,0 +1,59 @@
+;; bld-update.el --- Update pkgusr build scripts via ediff   -*- Emacs-Lisp -*-
+
+;; Copyright (C) 2014 Steve Youngs
+
+;; Author:     Steve Youngs <stevesteveyoungs.com>
+;; Maintainer: Steve Youngs <stevesteveyoungs.com>
+;; Created:    <2014-03-10>
+;; Time-stamp: <Monday Mar 10, 2014 17:35:01 steve>
+
+;; 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