public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/catalyst:pending commit in: etc/, catalyst/targets/, catalyst/base/, examples/, catalyst/
@ 2015-09-01  5:58 Brian Dolbec
  0 siblings, 0 replies; only message in thread
From: Brian Dolbec @ 2015-09-01  5:58 UTC (permalink / raw
  To: gentoo-commits

commit:     f6c3ede7ec389b9b9d39ede27ee1165a8bcc417b
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun May 24 07:36:49 2015 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Tue Sep  1 05:54:11 2015 +0000
URL:        https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=f6c3ede7

apply new compress code, normalize paths

 catalyst/base/stagebase.py           | 171 +++++++++++++++++++----------------
 catalyst/defaults.py                 |   4 +
 catalyst/main.py                     |   8 ++
 catalyst/targets/grp.py              |   2 +-
 catalyst/targets/livecd_stage1.py    |   2 +-
 catalyst/targets/livecd_stage2.py    |   6 +-
 catalyst/targets/netboot.py          |   8 +-
 catalyst/targets/netboot2.py         |   2 +-
 catalyst/targets/stage2.py           |   8 +-
 etc/catalyst.conf                    |  11 ++-
 examples/generic_stage_template.spec |  32 ++++++-
 11 files changed, 159 insertions(+), 95 deletions(-)

diff --git a/catalyst/base/stagebase.py b/catalyst/base/stagebase.py
index 6adc3b9..2e175f1 100644
--- a/catalyst/base/stagebase.py
+++ b/catalyst/base/stagebase.py
@@ -10,6 +10,8 @@ from stat import ST_UID, ST_GID, ST_MODE
 # for convienience
 pjoin = os.path.join
 
+from decomp.compress import CompressMap
+
 from catalyst.defaults import (SOURCE_MOUNT_DEFAULTS, TARGET_MOUNT_DEFAULTS,
 	PORT_LOGDIR_CLEAN)
 from catalyst.support import (CatalystError, msg, file_locate, normpath,
@@ -259,6 +261,14 @@ class StageBase(TargetBase, ClearBase, GenBase):
 			self.env["PORT_LOGDIR"] = self.settings["port_logdir"]
 			self.env["PORT_LOGDIR_CLEAN"] = PORT_LOGDIR_CLEAN
 
+		# Initialize our (de)compressor's)
+		self.decompressor = CompressMap(self.settings["decompress_definitions"],
+			env=self.env,
+			search_order=self.settings["decompressor_search_order"])
+
+		# save resources, it is not always needed
+		self.compressor = None
+
 	def override_cbuild(self):
 		if "CBUILD" in self.makeconf:
 			self.settings["CBUILD"]=self.makeconf["CBUILD"]
@@ -319,11 +329,11 @@ class StageBase(TargetBase, ClearBase, GenBase):
 					normpath(self.settings["kerncache_path"])
 		else:
 			self.settings["kerncache_path"]=normpath(self.settings["storedir"]+\
-				"/kerncache/"+self.settings["target_subpath"]+"/")
+				"/kerncache/"+self.settings["target_subpath"])
 
 	def set_target_path(self):
 		self.settings["target_path"]=normpath(self.settings["storedir"]+\
-			"/builds/"+self.settings["target_subpath"].rstrip('/')+".tar.bz2")
+			"/builds/"+self.settings["target_subpath"])
 		if "autoresume" in self.settings["options"]\
 			and self.resume.is_enabled("setup_target_path"):
 			print \
@@ -407,7 +417,7 @@ class StageBase(TargetBase, ClearBase, GenBase):
 				"/tmp/" + self.settings["source_subpath"] + "/")
 		else:
 			self.settings["source_path"]=normpath(self.settings["storedir"]+\
-				"/builds/"+self.settings["source_subpath"].rstrip('/')+".tar.bz2")
+				"/builds/"+self.settings["source_subpath"])
 			if os.path.isfile(self.settings["source_path"]):
 				# XXX: Is this even necessary if the previous check passes?
 				if os.path.exists(self.settings["source_path"]):
@@ -422,7 +432,7 @@ class StageBase(TargetBase, ClearBase, GenBase):
 			print "\tseedcache in the options of catalyst.conf the source path"
 			print "\twill then be "+\
 				normpath(self.settings["storedir"]+"/builds/"+\
-				self.settings["source_subpath"].rstrip('/')+".tar.bz2\n")
+					self.settings["source_subpath"]+"\n")
 
 	def set_dest_path(self):
 		if "root_path" in self.settings:
@@ -449,7 +459,7 @@ class StageBase(TargetBase, ClearBase, GenBase):
 		else:
 			self.settings["snapshot_path"]=normpath(self.settings["storedir"]+\
 				"/snapshots/" + self.settings["snapshot_name"] +
-				self.settings["snapshot"].rstrip('/')+".tar.bz2")
+				self.settings["snapshot"])
 
 			if os.path.exists(self.settings["snapshot_path"]):
 				self.settings["snapshot_path_hash"] = \
@@ -459,6 +469,9 @@ class StageBase(TargetBase, ClearBase, GenBase):
 						verbose = False)
 
 	def set_snapcache_path(self):
+		self.settings["snapshot_cache_path"]=\
+			normpath(pjoin(self.settings["snapshot_cache"],
+				self.settings["snapshot"]))
 		if "snapcache" in self.settings["options"]:
 			self.settings["snapshot_cache_path"] = \
 				normpath(pjoin(self.settings["snapshot_cache"],
@@ -677,47 +690,32 @@ class StageBase(TargetBase, ClearBase, GenBase):
 
 		clst_unpack_hash = self.resume.get("unpack")
 
+		unpack_info = {
+			'source': self.settings["source_path"],
+			"destination": self.settings["chroot_path"],
+			'mode': None,
+			'auto-ext': False,
+			}
+
+		display_msg="\nStarting %(mode)s from %(source)s\nto "+\
+			"%(destination)s (This may take some time) ...\n"
+
+		error_msg="'%(mode)s' extraction of %(source)s to %(destination)s failed."
+
 		if "seedcache" in self.settings["options"]:
-			if os.path.isdir(self.settings["source_path"]):
+			if os.path.isdir(unpack_info["source"]):
 				""" SEEDCACHE Is a directory, use rsync """
-				unpack_cmd="rsync -a --delete "+self.settings["source_path"]+\
-					" "+self.settings["chroot_path"]
-				display_msg="\nStarting rsync from "+\
-					self.settings["source_path"]+"\nto "+\
-					self.settings["chroot_path"]+\
-					" (This may take some time) ...\n"
-				error_msg="Rsync of "+self.settings["source_path"]+" to "+\
-					self.settings["chroot_path"]+" failed."
+				unpack_info['mode'] = "rsync"
 			else:
 				""" SEEDCACHE is a not a directory, try untar'ing """
 				print "Referenced SEEDCACHE does not appear to be a directory, trying to untar..."
-				display_msg="\nStarting tar extract from "+\
-					self.settings["source_path"]+"\nto "+\
-					self.settings["chroot_path"]+\
-						" (This may take some time) ...\n"
-				if "bz2" == self.settings["chroot_path"][-3:]:
-					unpack_cmd="tar --xattrs --xattrs-include=security.capability --xattrs-include=user.pax.flags --selinux -I lbzip2 -xpf "+self.settings["source_path"]+" -C "+\
-						self.settings["chroot_path"]
-				else:
-					unpack_cmd="tar --xattrs --xattrs-include=security.capability --xattrs-include=user.pax.flags --selinux -I lbzip2 -xpf "+self.settings["source_path"]+" -C "+\
-						self.settings["chroot_path"]
-				error_msg="Tarball extraction of "+\
-					self.settings["source_path"]+" to "+\
-					self.settings["chroot_path"]+" failed."
+				unpack_info['mode'] = self.decompressor.determine_mode(
+						self.settings["source_path"])
 		else:
 			""" No SEEDCACHE, use tar """
-			display_msg="\nStarting tar extract from "+\
-				self.settings["source_path"]+"\nto "+\
-				self.settings["chroot_path"]+\
-				" (This may take some time) ...\n"
-			if "bz2" == self.settings["chroot_path"][-3:]:
-				unpack_cmd="tar --xattrs --xattrs-include=security.capability --xattrs-include=user.pax.flags --selinux -I lbzip2 -xpf "+self.settings["source_path"]+" -C "+\
-					self.settings["chroot_path"]
-			else:
-				unpack_cmd="tar --xattrs --xattrs-include=security.capability --xattrs-include=user.pax.flags --selinux -I lbzip2 -xpf "+self.settings["source_path"]+" -C "+\
-					self.settings["chroot_path"]
-			error_msg="Tarball extraction of "+self.settings["source_path"]+\
-				" to "+self.settings["chroot_path"]+" failed."
+			unpack_info['mode'] = self.decompressor.determine_mode(
+					unpack_info["source"])
+		# endif "seedcache"
 
 		if "autoresume" in self.settings["options"]:
 			if os.path.isdir(self.settings["source_path"]) \
@@ -785,8 +783,11 @@ class StageBase(TargetBase, ClearBase, GenBase):
 			if "kerncache" in self.settings["options"]:
 				ensure_dirs(self.settings["kerncache_path"],mode=0755)
 
-			print display_msg
-			cmd(unpack_cmd,error_msg,env=self.env)
+			print display_msg %(unpack_info)
+
+			# now run the decompressor
+			if not self.decompressor.extract(unpack_info):
+				print error_msg %(unpack_info)
 
 			if "source_path_hash" in self.settings:
 				self.resume.enable("unpack",
@@ -800,16 +801,26 @@ class StageBase(TargetBase, ClearBase, GenBase):
 		unpack=True
 		snapshot_hash = self.resume.get("unpack_portage")
 
+		unpack_errmsg="Error unpacking snapshot using mode %(mode)s"
+
+		unpack_info = {
+			'source': self.settings["snapshot_path"],
+			'destination': self.settings["snapshot_cache_path"],
+			'mode': None,
+			'auto-ext': False,
+			}
+
+		target_portdir = normpath(self.settings["chroot_path"] +
+			self.settings["repo_basedir"] + "/" + self.settings["repo_name"])
+		print self.settings["chroot_path"]
+		print "unpack(), target_portdir = " + target_portdir
 		if "snapcache" in self.settings["options"]:
 			snapshot_cache_hash=\
-				read_from_clst(self.settings["snapshot_cache_path"] + "/" +
-					"catalyst-hash")
-			destdir=self.settings["snapshot_cache_path"]
-			if "bz2" == self.settings["chroot_path"][-3:]:
-				unpack_cmd="tar --xattrs --xattrs-include=security.capability --xattrs-include=user.pax.flags --selinux -I lbzip2 -xpf "+self.settings["snapshot_path"]+" -C "+destdir
-			else:
-				unpack_cmd="tar --xattrs --xattrs-include=security.capability --xattrs-include=user.pax.flags --selinux -xpf "+self.settings["snapshot_path"]+" -C "+destdir
-			unpack_errmsg="Error unpacking snapshot"
+				read_from_clst(self.settings["snapshot_cache_path"]+\
+				"catalyst-hash")
+			unpack_info['mode'] = self.decompressor.determine_mode(
+				unpack_info['source'])
+
 			cleanup_msg="Cleaning up invalid snapshot cache at \n\t"+\
 				self.settings["snapshot_cache_path"]+\
 				" (This can take a long time)..."
@@ -820,21 +831,16 @@ class StageBase(TargetBase, ClearBase, GenBase):
 				print "Valid snapshot cache, skipping unpack of portage tree..."
 				unpack=False
 		else:
-			destdir = normpath(self.settings["chroot_path"] + self.settings["portdir"])
 			cleanup_errmsg="Error removing existing snapshot directory."
 			cleanup_msg=\
 				"Cleaning up existing portage tree (This can take a long time)..."
-			if "bz2" == self.settings["chroot_path"][-3:]:
-				unpack_cmd="tar --xattrs --xattrs-include=security.capability --xattrs-include=user.pax.flags --selinux -I lbzip2 -xpf "+self.settings["snapshot_path"]+" -C "+\
-					self.settings["chroot_path"]+"/usr"
-			else:
-				unpack_cmd="tar --xattrs --xattrs-include=security.capability --xattrs-include=user.pax.flags --selinux -xpf "+self.settings["snapshot_path"]+" -C "+\
-					self.settings["chroot_path"]+"/usr"
-			unpack_errmsg="Error unpacking snapshot"
+			unpack_info['destination'] = normpath(
+				self.settings["chroot_path"] + self.settings["repo_basedir"])
+			unpack_info['mode'] = self.decompressor.determine_mode(
+				unpack_info['source'])
 
 			if "autoresume" in self.settings["options"] \
-				and os.path.exists(self.settings["chroot_path"] +
-					self.settings["portdir"]) \
+				and os.path.exists(target_portdir) \
 				and self.resume.is_enabled("unpack_portage") \
 				and self.settings["snapshot_path_hash"] == snapshot_hash:
 					print \
@@ -844,14 +850,16 @@ class StageBase(TargetBase, ClearBase, GenBase):
 		if unpack:
 			if "snapcache" in self.settings["options"]:
 				self.snapshot_lock_object.write_lock()
-			if os.path.exists(destdir):
+			if os.path.exists(target_portdir):
 				print cleanup_msg
-				cleanup_cmd="rm -rf "+destdir
+				cleanup_cmd = "rm -rf " + target_portdir
+				print "unpack() cleanup_cmd = " + cleanup_cmd
 				cmd(cleanup_cmd,cleanup_errmsg,env=self.env)
-			ensure_dirs(destdir,mode=0755)
+			ensure_dirs(target_portdir, mode=0755)
 
 			print "Unpacking portage tree (This can take a long time) ..."
-			cmd(unpack_cmd,unpack_errmsg,env=self.env)
+			if not self.decompressor.extract(unpack_info):
+				print unpack_errmsg %(unpack_info)
 
 			if "snapcache" in self.settings["options"]:
 				myf=open(self.settings["snapshot_cache_path"] +
@@ -1243,6 +1251,12 @@ class StageBase(TargetBase, ClearBase, GenBase):
 				raise CatalystError("Build failed, could not execute preclean")
 
 	def capture(self):
+		# initialize it here so it doesn't use
+		# resources if it is not needed
+		if not self.compressor:
+			self.compressor = CompressMap(self.settings["compress_definitions"],
+				env=self.env, default_mode=self.settings['compression_mode'])
+
 		if "autoresume" in self.settings["options"] \
 			and self.resume.is_enabled("capture"):
 			print "Resume point detected, skipping capture operation..."
@@ -1254,16 +1268,24 @@ class StageBase(TargetBase, ClearBase, GenBase):
 			""" Now make sure path exists """
 			ensure_dirs(mypath)
 
-			print "Creating stage tarball..."
-
-			cmd("tar --xattrs --xattrs-include=security.capability --xattrs-include=user.pax.flags --selinux -I lbzip2 -cpf "+self.settings["target_path"]+" -C "+\
-				self.settings["stage_path"]+" .",\
-				"Couldn't create stage tarball",env=self.env)
+			pack_info = self.compressor.create_infodict(
+				source=".",
+				basedir=self.settings["stage_path"],
+				filename=self.settings["target_path"],
+				mode=self.settings["compression_mode"],
+				auto_extension=True
+				)
+			target_filename = ".".join([self.settings["target_path"],
+				self.compressor.extension(pack_info['mode'])])
 
-			self.gen_contents_file(self.settings["target_path"])
-			self.gen_digest_file(self.settings["target_path"])
+			print "Creating stage tarball..."
 
-			self.resume.enable("capture")
+			if self.compressor.compress(pack_info):
+				self.gen_contents_file(target_filename)
+				self.gen_digest_file(target_filename)
+				self.resume.enable("capture")
+			else:
+				print "Couldn't create stage tarball:", target_filename
 
 	def run_local(self):
 		if "autoresume" in self.settings["options"] \
@@ -1365,12 +1387,7 @@ class StageBase(TargetBase, ClearBase, GenBase):
 		for x in self.settings["action_sequence"]:
 			print "--- Running action sequence: "+x
 			sys.stdout.flush()
-			try:
-				apply(getattr(self,x))
-			except Exception as e:
-				print "--- Exeption running action sequence:" + x
-				self.mount_safety_check()
-				raise e
+			apply(getattr(self,x))
 
 
 	def unmerge(self):

diff --git a/catalyst/defaults.py b/catalyst/defaults.py
index 975e55b..5ce2858 100644
--- a/catalyst/defaults.py
+++ b/catalyst/defaults.py
@@ -16,12 +16,15 @@ valid_config_file_values = required_config_file_values[:]
 valid_config_file_values.extend([ "distcc", "envscript",
 	"options", "DEBUG", "VERBOSE",
 	"snapshot_cache", "hash_function", "digests", "contents"
+	"compression_mode", "decompressor_search_order",
 	])
 
 verbosity = 1
 
 confdefaults={
 	"archdir": "%(PythonDir)s/arch",
+	"compression_mode": 'lbzip2',
+	"decompressor_search_order": 'lbzip2 bzip2 tar pixz xz gzip squashfs',
 	"distdir": "/usr/portage/distfiles",
 	"hash_function": "crc32",
 	"icecream": "/var/cache/icecream",
@@ -33,6 +36,7 @@ confdefaults={
 	"portdir": "/usr/portage",
 	"port_tmpdir": "/var/tmp/portage",
 	"PythonDir": "./catalyst",
+	"repo_basedir": "/usr",
 	"repo_name": "portage",
 	"sharedir": "/usr/share/catalyst",
 	"shdir": "/usr/share/catalyst/targets/",

diff --git a/catalyst/main.py b/catalyst/main.py
index 3ab4166..0ba81b9 100644
--- a/catalyst/main.py
+++ b/catalyst/main.py
@@ -13,6 +13,7 @@ import os.path
 
 __selfpath__ = os.path.abspath(os.path.dirname(__file__))
 
+from decomp.compress import COMPRESS_DEFINITIONS, DECOMPRESS_DEFINITIONS
 
 import catalyst.config
 import catalyst.util
@@ -103,6 +104,8 @@ def parse_config(myconfig):
 		if x in myconf:
 			if x == 'options':
 				conf_values[x] = set(myconf[x].split())
+			elif x in ["decompressor_search_order"]:
+				conf_values[x] = myconf[x].split()
 			else:
 				conf_values[x]=myconf[x]
 		else:
@@ -281,6 +284,11 @@ def main():
 	hash_map = HashMap(HASH_DEFINITIONS)
 	conf_values["hash_map"] = hash_map
 
+	# initialize our (de)compression definitions
+	conf_values['decompress_definitions'] = DECOMPRESS_DEFINITIONS
+	conf_values['compress_definitions'] = COMPRESS_DEFINITIONS
+	# TODO add capability to config/spec new definitions
+
 	# Start checking that digests are valid now that hash_map is initialized
 	if "digests" in conf_values:
 		for i in conf_values["digests"].split():

diff --git a/catalyst/targets/grp.py b/catalyst/targets/grp.py
index 14cffe0..5a10fff 100644
--- a/catalyst/targets/grp.py
+++ b/catalyst/targets/grp.py
@@ -42,7 +42,7 @@ class grp(StageBase):
 		StageBase.__init__(self,spec,addlargs)
 
 	def set_target_path(self):
-		self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
+		self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"])
 		if "autoresume" in self.settings["options"] \
 			and self.resume.is_enabled("setup_target_path"):
 			print "Resume point detected, skipping target path setup operation..."

diff --git a/catalyst/targets/livecd_stage1.py b/catalyst/targets/livecd_stage1.py
index 8402e7a..d5645e8 100644
--- a/catalyst/targets/livecd_stage1.py
+++ b/catalyst/targets/livecd_stage1.py
@@ -33,7 +33,7 @@ class livecd_stage1(StageBase):
 					"unbind", "clean","clear_autoresume"]
 
 	def set_target_path(self):
-		self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+'/')
+		self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"])
 		if "autoresume" in self.settings["options"] \
 			and self.resume.is_enabled("setup_target_path"):
 				print "Resume point detected, skipping target path setup operation..."

diff --git a/catalyst/targets/livecd_stage2.py b/catalyst/targets/livecd_stage2.py
index 9f0733e..e5ca074 100644
--- a/catalyst/targets/livecd_stage2.py
+++ b/catalyst/targets/livecd_stage2.py
@@ -37,13 +37,13 @@ class livecd_stage2(StageBase):
 		file_locate(self.settings, ["cdtar","controller_file"])
 
 	def set_source_path(self):
-		self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"].rstrip('/')+".tar.bz2")
+		self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"])
 		if os.path.isfile(self.settings["source_path"]):
 			self.settings["source_path_hash"] = \
 				self.settings["hash_map"].generate_hash(
 					self.settings["source_path"])
 		else:
-			self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+'/')
+			self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"])
 		if not os.path.exists(self.settings["source_path"]):
 			raise CatalystError("Source Path: " +
 				self.settings["source_path"] + " does not exist.",
@@ -53,7 +53,7 @@ class livecd_stage2(StageBase):
 		self.settings["spec_prefix"]="livecd"
 
 	def set_target_path(self):
-		self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
+		self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"])
 		if "autoresume" in self.settings["options"] \
 			and self.resume.is_enabled("setup_target_path"):
 				print "Resume point detected, skipping target path setup operation..."

diff --git a/catalyst/targets/netboot.py b/catalyst/targets/netboot.py
index de8dc85..c41ed59 100644
--- a/catalyst/targets/netboot.py
+++ b/catalyst/targets/netboot.py
@@ -95,10 +95,10 @@ class netboot(StageBase):
 
 		for x in loopy:
 			if "netboot/packages/"+x+"/files" in self.settings:
-			    if type(self.settings["netboot/packages/"+x+"/files"]) == types.ListType:
-				    myfiles.extend(self.settings["netboot/packages/"+x+"/files"])
-			    else:
-				    myfiles.append(self.settings["netboot/packages/"+x+"/files"])
+				if type(self.settings["netboot/packages/"+x+"/files"]) == types.ListType:
+					myfiles.extend(self.settings["netboot/packages/"+x+"/files"])
+				else:
+					myfiles.append(self.settings["netboot/packages/"+x+"/files"])
 
 		if "netboot/extra_files" in self.settings:
 			if type(self.settings["netboot/extra_files"]) == types.ListType:

diff --git a/catalyst/targets/netboot2.py b/catalyst/targets/netboot2.py
index b492e6a..3305a2a 100644
--- a/catalyst/targets/netboot2.py
+++ b/catalyst/targets/netboot2.py
@@ -52,7 +52,7 @@ class netboot2(StageBase):
 
 	def set_target_path(self):
 		self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+\
-			self.settings["target_subpath"]+"/")
+			self.settings["target_subpath"])
 		if "autoresume" in self.settings["options"] \
 			and self.resume.is_enabled("setup_target_path"):
 				print "Resume point detected, skipping target path setup operation..."

diff --git a/catalyst/targets/stage2.py b/catalyst/targets/stage2.py
index e54b5c9..40dc938 100644
--- a/catalyst/targets/stage2.py
+++ b/catalyst/targets/stage2.py
@@ -19,10 +19,10 @@ class stage2(StageBase):
 		StageBase.__init__(self,spec,addlargs)
 
 	def set_source_path(self):
-		if "seedcache" in self.settings["options"] and os.path.isdir(normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")):
-			self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")
+		if "seedcache" in self.settings["options"] and os.path.isdir(normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root")):
+			self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root")
 		else:
-			self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"].rstrip('/')+".tar.bz2")
+			self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"])
 			if os.path.isfile(self.settings["source_path"]):
 				if os.path.exists(self.settings["source_path"]):
 				# XXX: Is this even necessary if the previous check passes?
@@ -34,7 +34,7 @@ class stage2(StageBase):
 		print "Source path set to "+self.settings["source_path"]
 		if os.path.isdir(self.settings["source_path"]):
 			print "\tIf this is not desired, remove this directory or turn of seedcache in the options of catalyst.conf"
-			print "\tthe source path will then be "+normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"].rstrip('/')+".tar.bz2\n")
+			print "\tthe source path will then be "+normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"] + "\n")
 
 	# XXX: How do these override_foo() functions differ from the ones in
 	# StageBase and why aren't they in stage3_target?

diff --git a/etc/catalyst.conf b/etc/catalyst.conf
index 7f56671..aa5d815 100644
--- a/etc/catalyst.conf
+++ b/etc/catalyst.conf
@@ -72,9 +72,18 @@ hash_function="crc32"
 # (These options can be used together)
 options="autoresume bindist kerncache pkgcache seedcache snapcache"
 
-# portdir specifies the source portage tree used by the snapshot target.
+# Source portdir specifies the source portage tree used by the snapshot target.
 portdir="/usr/portage"
 
+# Target portdir setting.  It needs to be in 2 parts.
+# They will be used separately, then added together where needed.
+# eg:
+# repo_basedir="/var/lib/repos"
+# repo_name="gentoo"
+#
+repo_basedir="/usr"
+repo_name="portage"
+
 # sharedir specifies where all of the catalyst runtime executables
 # and other shared lib objects are.
 # Most users do not need to change this.

diff --git a/examples/generic_stage_template.spec b/examples/generic_stage_template.spec
index 45268ca..b43aebe 100644
--- a/examples/generic_stage_template.spec
+++ b/examples/generic_stage_template.spec
@@ -35,16 +35,42 @@ profile:
 
 # This specifies which snapshot to use for building this target.
 # example:
-# snapshot: 2006.1
+# snapshot: 2006.1.tar.bz2
 snapshot:
 
 # This specifies where the seed stage comes from for this target,  The path is
 # relative to $clst_sharedir/builds.  The rel_type is also used as a path prefix
-# for the seed.
+# for the seed.  It must be a complete filename including the extension.
 # example:
-# default/stage3-x86-2006.1
+# default/stage3-x86-2006.1.tar.bz2
 source_subpath:
 
+# The prefered compression/decompression command and algorithm to use
+# for creating the final stage tarballs.  For decompression the configured
+# method will be used if the file's extension is one of it's types listed.
+# Otherwise it will pick one that does.  Of course you must ensure to have
+# the correct package installed that supplies that command/algorithm type.
+# available options are:
+#	Name          Compressor Extension
+#	"rsync"     : None
+#	"lbzip2"    : tar.bz2
+#	"bzip2"     : tar.bz2
+#	"tar"       : tar
+#	"xz"        : tar.xz
+#	"pixz"      : tar.xz
+#	"gzip"      : tar.gz
+#	"squashfs"  : squashfs, sfs
+#
+compression_mode: lbzip2
+
+# The search order to use for determining the decompressor
+# to use on the source file.  i.e. check the extensions it is capable of
+# decompressing to find a match.  Use the list above for the modes available.
+#Note: rsync is a special case, do not include it below.
+#
+decompressor_search_order: lbzip2 bzip2 tar pixz xz gzip squashfs
+
+
 # These are the hosts used as distcc slaves when distcc is enabled in your
 # catalyst.conf.  It follows the same syntax as distcc-config --set-hosts and
 # is entirely optional.


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2015-09-01  5:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-01  5:58 [gentoo-commits] proj/catalyst:pending commit in: etc/, catalyst/targets/, catalyst/base/, examples/, catalyst/ Brian Dolbec

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox