Move upgrade script to separate file. Add framework to support future upgrades.
authorOleksandr Gavenko <gavenkoa@gmail.com>
Sun, 13 Mar 2016 14:06:08 +0200
changeset 1358 54b0b0bb4570
parent 1357 a796e1fddc70
child 1359 bde0bb33fb61
Move upgrade script to separate file. Add framework to support future upgrades.
Makefile
upgrade/1.bash
--- a/Makefile	Sun Mar 13 13:56:48 2016 +0200
+++ b/Makefile	Sun Mar 13 14:06:08 2016 +0200
@@ -6,7 +6,7 @@
 ################################################################
 # Standard Makefile settings.
 
-SHELL = /bin/sh
+SHELL = /bin/bash
 export PATH := /bin:/usr/bin:${PATH}
 
 # Disable built in pattern rules.
@@ -95,8 +95,8 @@
 fi
 	read ver <$(COMPAT_FILE); if [ "$$ver" -ne $(COMPAT_VER) ]; then echo "*** "Run '"make upgrade"' first" ***"; exit 1; fi
 
-.PHONY: check-upgrade-comapt
-check-upgrade-comapt:
+.PHONY: upgrade
+upgrade:
 	\
 if [ -f $(COMPAT_FILE) ]; then \
   read ver <$(COMPAT_FILE); \
@@ -104,27 +104,13 @@
     echo "*** "Project is too old, downgrade is not possible..." ***"; \
     exit 1; \
   fi; \
-fi
-
-.PHONY: upgrade
-upgrade: check-upgrade-comapt
-	\
-mkdir -p $(mylispdir); \
-rm -f $(emacsdir)/autoload-my.el; \
-rm -f ~/.emacs; \
-[ -d $(emacsdir)/my-lisp ] && mv $(emacsdir)/my-lisp $(mylispdir); \
-for f in .emacs-my .emacs-custom.el .emacs-pre .emacs-post .emacs-places .emacs.desktop .emacs-places .emacs-autogen .ido.last .recentf; do \
-  if [ -f ~/$$f ]; then [ -f $(emacsdir)/$$f ] && mv ~/$$f $(emacsdir)/$$f.1 || mv ~/$$f $(emacsdir); fi; \
-  if [ -f $(mylispdir)/$$f ]; then [ -f $(emacsdir)/$$f ] && mv $(mylispdir)/$$f $(emacsdir)/$$f.2 || mv $(mylispdir)/$$f $(emacsdir); fi; \
-done; \
-for f in `find $(mylispdir) -maxdepth 1 -type f -name '.emacs?*'`; do \
-  fn=$${f##*/}; \
-  [ -f $(emacsdir)/$$fn ] && mv $$f $(emacsdir)/$$fn.3 || mv $$f $(emacsdir); \
-done; \
-if [ -f ~/.emacs.bmk ]; then [ -f $(emacsdir)/bookmarks ] && mv ~/.emacs.bmk $(emacsdir)/bookmarks.$$$$ || mv ~/.emacs.bmk $(emacsdir)/bookmarks; fi; \
-if [ -f $(emacsdir)/.emacs.bmk ]; then [ -f $(emacsdir)/bookmarks ] && mv $(emacsdir)/.emacs.bmk $(emacsdir)/bookmarks.$$$$ || mv $(emacsdir)/.emacs.bmk $(emacsdir)/bookmarks; fi; \
-echo $(COMPAT_VER) >$(COMPAT_FILE); \
-make install
+else \
+  ver=0; \
+fi; \
+for ((i=ver+1; i <= $(COMPAT_VER); i++)); do \
+  $(SHELL) upgrade/$$i.bash $(emacsdir); \
+done
+	make install
 
 .PHONY: install-all
 install-all: install
@@ -138,6 +124,7 @@
 .PHONY: install
 install: check-install-comapt
 	mkdir -p $(mylispdir)
+	echo $(COMPAT_VER) >$(COMPAT_FILE)
 	$(cleanup_mylispdir)
 	for file in .emacs-pre .emacs-post; do \
 		[ -f $(emacsdir)/$$file ] || cp $$file $(emacsdir)/$$file; \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upgrade/1.bash	Sun Mar 13 14:06:08 2016 +0200
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+set -x -e
+
+emacsdir=$1
+if [ -z $emacsdir ]; then
+  echo You forget to pass emacsdir!
+  exit 1
+fi
+mylispdir=$emacsdir/my
+
+mkdir -p $mylispdir
+rm -f $emacsdir/autoload-my.el
+rm -f ~/.emacs
+[ -d $emacsdir/my-lisp ] && mv $emacsdir/my-lisp $mylispdir
+for f in .emacs-my .emacs-custom.el .emacs-pre .emacs-post .emacs-places .emacs.desktop .emacs-places .emacs-autogen .ido.last .recentf; do
+  if [ -f ~/$f ]; then [ -f $emacsdir/$f ] && mv ~/$f $emacsdir/$f.1 || mv ~/$f $emacsdir; fi
+  if [ -f $mylispdir/$f ]; then [ -f $emacsdir/$f ] && mv $mylispdir/$f $emacsdir/$f.2 || mv $mylispdir/$f $emacsdir; fi
+done
+for f in `find $mylispdir -maxdepth 1 -type f -name '.emacs?*'`; do
+  fn=${f##*/}
+  [ -f $emacsdir/$fn ] && mv $f $emacsdir/$fn.3 || mv $f $emacsdir
+done
+if [ -f ~/.emacs.bmk ]; then [ -f $emacsdir/bookmarks ] && mv ~/.emacs.bmk $emacsdir/bookmarks.$$ || mv ~/.emacs.bmk $emacsdir/bookmarks; fi
+if [ -f $emacsdir/.emacs.bmk ]; then [ -f $emacsdir/bookmarks ] && mv $emacsdir/.emacs.bmk $emacsdir/bookmarks.$$ || mv $emacsdir/.emacs.bmk $emacsdir/bookmarks; fi