diff options
author | Daniel Narvaez <dwnarvaez@gmail.com> | 2012-11-24 14:56:30 (GMT) |
---|---|---|
committer | Daniel Narvaez <dwnarvaez@gmail.com> | 2012-11-24 14:57:37 (GMT) |
commit | 6da11532282ec2a481ad227088713140b8d6de0a (patch) | |
tree | 0ba8e2dc8e745b54d48786e8b1a54860e227d08c | |
parent | 0f41ee61f493e46257acebd141aa0a9fe074adbe (diff) |
Add a target to generate relocatable snapshots
-rw-r--r-- | Makefile.buildbot | 19 | ||||
-rw-r--r-- | commands/common.py | 3 | ||||
-rw-r--r-- | devbot/config.py | 45 | ||||
-rw-r--r-- | devbot/environ.py | 11 |
4 files changed, 63 insertions, 15 deletions
diff --git a/Makefile.buildbot b/Makefile.buildbot index bb20390..56e7e46 100644 --- a/Makefile.buildbot +++ b/Makefile.buildbot @@ -1,7 +1,24 @@ DOCS_SOURCE=$(SOURCE_DIR)/sugar-docs/build/ DOCS_DEST=dnarvaez@shell.sugarlabs.org:~/public_html/sugar-docs/ +SNAPSHOT_DEST_HOST=dnarvaez@shell.sugarlabs.org +SNAPSHOT_DEST_DIR=~/public_html/snapshots/ +SNAPSHOT_DEST=$(SNAPSHOT_DEST_HOST):$(SNAPSHOT_DEST_DIR)$(SUGAR_BUILDBOT) -.PHONY: upload-docs +.PHONY: upload-docs upload-snapshot upload-docs: rsync -r --progress $(DOCS_SOURCE) $(DOCS_DEST) + +upload-snapshot: + @TMP_DIR=`mktemp -td sugar-build-snapshot-XXXX` && \ + SNAPSHOT_FILENAME=sugar-build-`date +%Y%m%d-%H%M%S.tar.xv` && \ + echo "Creating $$SNAPSHOT_FILENAME" && \ + tar cJ --exclude=source \ + --exclude=build \ + --exclude=logs \ + --exclude=.git* \ + -f $$TMP_DIR/$$SNAPSHOT_FILENAME . && \ + echo "Uploading" && \ + scp $$TMP_DIR/$$SNAPSHOT_FILENAME $(SNAPSHOT_DEST) && \ + rm -f $$TMP_DIR/$$SNAPSHOT_FILENAME && \ + ssh $(SNAPSHOT_DEST_HOST) $(SNAPSHOT_DEST_DIR)/upload-completed diff --git a/commands/common.py b/commands/common.py index a8b687c..9a6d5c0 100644 --- a/commands/common.py +++ b/commands/common.py @@ -12,7 +12,8 @@ from devbot import distro def setup(): config.set_config_dir(os.path.join(base_dir, "config")) - config.set_install_dir(os.path.join(base_dir, "install")) + config.set_install_dir(os.path.join(base_dir, "install"), + relocatable="SUGAR_BUILDBOT" in os.environ) config.set_source_dir(os.path.join(base_dir, "source")) config.set_build_dir(os.path.join(base_dir, "build")) config.set_commands_dir(os.path.join(base_dir, "commands")) diff --git a/devbot/config.py b/devbot/config.py index aabacb3..07fc753 100644 --- a/devbot/config.py +++ b/devbot/config.py @@ -1,5 +1,6 @@ import json import os +import tempfile from devbot import distro @@ -38,6 +39,10 @@ class Module: def get_build_dir(self): return os.path.join(build_dir, self.name) +def _ensure_dir(dir): + if not os.path.exists(dir): + os.mkdir(dir) + def set_config_dir(dir): global config_dir config_dir = dir @@ -46,7 +51,31 @@ def set_logs_dir(dir): global logs_dir logs_dir = dir -def set_install_dir(dir): +def _get_real_install_dir(dir, relocatable): + real_prefix_path = os.path.join(dir, "real_prefix") + + if os.path.exists(real_prefix_path): + with open(real_prefix_path) as f: + install_dir = f.read() + elif relocatable: + tmp_dir = tempfile.mkdtemp(prefix="sugar-build") + install_dir = os.path.join(tmp_dir, "install") + with open(real_prefix_path, "w") as f: + f.write(install_dir) + else: + return dir + + tmp_dir = os.path.dirname(install_dir) + if not os.path.exists(tmp_dir): + os.mkdir(tmpdir) + + if os.path.islink(install_dir): + os.remove(install_dir) + os.symlink(dir, install_dir) + + return install_dir + +def set_install_dir(dir, relocatable=False): global system_lib_dir global install_dir global devbot_dir @@ -55,9 +84,17 @@ def set_install_dir(dir): global etc_dir global lib_dir - install_dir = dir + _ensure_dir(dir) + + install_dir = _get_real_install_dir(dir, relocatable) + devbot_dir = os.path.join(install_dir, "devbot") + _ensure_dir(devbot_dir) + share_dir = os.path.join(install_dir, "share") + _ensure_dir(share_dir) + _ensure_dir(os.path.join(share_dir, "aclocal")) + bin_dir = os.path.join(install_dir, "bin") etc_dir = os.path.join(install_dir, "etc") @@ -70,11 +107,15 @@ def set_install_dir(dir): def set_source_dir(dir): global source_dir + source_dir = dir + _ensure_dir(source_dir) def set_build_dir(dir): global build_dir + build_dir = dir + _ensure_dir(build_dir) def set_commands_dir(dir): global commands_dir diff --git a/devbot/environ.py b/devbot/environ.py index 12140b7..b1a0453 100644 --- a/devbot/environ.py +++ b/devbot/environ.py @@ -4,7 +4,6 @@ import os from devbot import config def setup(): - _setup_dirs() _setup_gconf() _setup_variables() @@ -76,13 +75,3 @@ def _setup_gconf(): os.environ["GCONF_SCHEMA_INSTALL_SOURCE"] = \ "xml:merged:" + os.path.join(gconf_dir, "gconf.xml.defaults") - -def _setup_dirs(): - for dir in [config.source_dir, - config.install_dir, - config.build_dir, - config.share_dir, - config.devbot_dir, - os.path.join(config.share_dir, "aclocal")]: - if not os.path.exists(dir): - os.mkdir(dir) |