Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Narvaez <dwnarvaez@gmail.com>2012-11-24 14:56:30 (GMT)
committer Daniel Narvaez <dwnarvaez@gmail.com>2012-11-24 14:57:37 (GMT)
commit6da11532282ec2a481ad227088713140b8d6de0a (patch)
tree0ba8e2dc8e745b54d48786e8b1a54860e227d08c
parent0f41ee61f493e46257acebd141aa0a9fe074adbe (diff)
Add a target to generate relocatable snapshots
-rw-r--r--Makefile.buildbot19
-rw-r--r--commands/common.py3
-rw-r--r--devbot/config.py45
-rw-r--r--devbot/environ.py11
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)