commit 3820f32309ff7f4448418be59f680d70d5768632
Author: Josef Reidinger <jreidinger@suse.cz>
Date:   Fri Feb 17 14:28:23 2012 +0000

    allow multiple modules to support case when module was renamed. Also few more fixes

diff --git a/Makefile b/Makefile
index 9cbbcaf..4c9a366 100644
--- a/Makefile
+++ b/Makefile
@@ -1,28 +1,35 @@
 # default rule
 
+MODULE_NEW_NAME := $(shell echo $(MODULE) | sed "s/,.*//")
+MODULE_REGEX := $(shell echo $(MODULE) | sed "s/,/|/g")
+
 all: git
 
 git: svn
 	-echo "Convert SVN to GIT"
 	# convert svn to bare git repo
-	(cd $(MODULE).dir; rm -rf yast-$(MODULE); /abuild/projects/svn2git/svn-all-fast-export --debug-rules --add-metadata --identity-map ../yast.map --rules ../yast.rules svn > stdout.svn2git 2> stderr.svn2git)
+	(cd $(MODULE_NEW_NAME).dir; rm -rf yast-$(MODULE_NEW_NAME); /abuild/projects/svn2git/svn-all-fast-export --debug-rules --add-metadata --identity-map ../yast.map --rules ../yast.rules svn > stdout.svn2git 2> stderr.svn2git)
 
 svn: extract
 	-echo "Create new SVN repo"
 	# load the splitted dump into a new svn repo
-	(cd $(MODULE).dir; rm -rf svn; mkdir svn; cd svn; svnadmin create .; svnadmin load . < ../dump > ../stdout.svnadmin 2> ../stderr.svnadmin)
+	(cd $(MODULE_NEW_NAME).dir; rm -rf svn; mkdir svn; cd svn; svnadmin create .; svnadmin load . < ../dump > ../stdout.svnadmin 2> ../stderr.svnadmin)
 
-extract: moduledir
-	-echo "Extracting relevant revisions for $(MODULE)"
+extract: moduledir yast-full.solv
+	-echo "Extracting relevant revisions for $(MODULE_NEW_NAME)"
 # split the full dump
-	(cd $(MODULE).dir; ruby ../dump-splitter.rb --debug ../../yast-full.dump ../yast-full.solv $(MODULE) > dump)
+	(cd $(MODULE_NEW_NAME).dir; ruby ../dump-splitter.rb --debug ../../yast-full.dump ../yast-full.solv $(MODULE) > dump)
+
+yast-full.solv: ../yast-full.dump
+	ruby dump2solv.rb $< $@
 
 moduledir: module.rule
-	rm -rf $(MODULE).dir
-	mkdir -p $(MODULE).dir
+	rm -rf ${MODULE_NEW_NAME}.dir
+	mkdir -p ${MODULE_NEW_NAME}.dir
 
 module.rule: modulename
-	-echo "declare MODULE=$(MODULE)" > module.rule
+	-echo "declare MODULE_NEW_NAME=${MODULE_NEW_NAME}" > module.rule
+	-echo "declare MODULE_REGEX=${MODULE_REGEX}" >> module.rule
 
 modulename:
 	-if test -z "$(MODULE)"; then echo "Module name missing, set MODULE="; exit 1; fi
diff --git a/dump-splitter.rb b/dump-splitter.rb
index a72ff38..47b0fd5 100644
--- a/dump-splitter.rb
+++ b/dump-splitter.rb
@@ -130,7 +130,7 @@ loop do
 	if filter
 	  usage "Excessive arguments"
 	else
-	  filter = arg
+	  filter = arg.split(',')
 	end
       else
 	solvfile = arg
diff --git a/revtree.rb b/revtree.rb
index af173bb..9a99390 100644
--- a/revtree.rb
+++ b/revtree.rb
@@ -26,7 +26,7 @@ $have_any_trunk = false
 #
 # Check if path matches filter
 #
-def path_matches? path, filter
+def path_matches? path, filters
   path_components = path.split("/").collect! { |p| p.to_sym }
   # check if we can apply the filter
   
@@ -35,7 +35,11 @@ def path_matches? path, filter
   when :trunk
     filter_pos = 1 # assume "trunk/<filter>"
   when :branches
-    filter_pos = 2 # assume "branches/<branch>/<filter>"
+    if path_components[1] == :tmp #special tmp branch, we also want history
+      filter_pos = 3
+    else
+      filter_pos = 2 # assume "branches/<branch>/<filter>"
+    end
   when :tags
     filter_pos = 2 # assume "tags/<tag>/<filter>"
   when :users, :reipl # private branches
@@ -46,7 +50,7 @@ def path_matches? path, filter
     raise "Unknown path start #{path_components[0].inspect}<#{path}>"
   end
   
-  return path_components[filter_pos] == filter
+  return filters.include? path_components[filter_pos]
 end
 
 
@@ -175,7 +179,7 @@ class Satsolver::Solvable
   #
   # @return path if filter matches
   #
-  def is_relevant_for? filter, parents
+  def is_relevant_for? filters, parents
     pathrel = nil
     # get the one provides representing the Node-path
     self_id = @@pool.id("#{name}_#{version}")
@@ -190,7 +194,7 @@ class Satsolver::Solvable
     pathrel = obsoletes[0] if pathrel.nil? # delete
     raise "Node #{name} of rev #{rev.name} without path" if pathrel.nil?
     path = pathrel.name
-    unless path_matches?(path, filter) || parents[path]
+    unless path_matches?(path, filters) || parents[path]
       # this node doesn't touch a relevant path or a parent
       #  still it might be relevant if it copies from a parent
       pathreq = requires[0] # copypath
@@ -487,7 +491,7 @@ private
   # return relevant path
   #
   def check_node node, rev, parents
-    path = node.is_relevant_for?(@filter, parents)
+    path = node.is_relevant_for?(@filters, parents)
     return nil unless path
     rev.make_relevant!
     node.make_relevant!
@@ -576,10 +580,10 @@ public
   #
   # Go through all revisions and mark the relevant ones.
   #
-  def mark_relevants filter
-    Log.log(1, "mark_relevants '#{filter}'") if $debug
+  def mark_relevants filters
+    Log.log(1, "mark_relevants '#{filters}'") if $debug
     revnum = 0
-    @filter = filter.to_sym
+    @filters = filters.collect {|f| f.to_sym}
     parents = {} # hash of relevant parent dirs, to detect relevance of 'delete' nodes
     while rev = get_rev(revnum)
       if !$quiet && revnum % 1000 == 0
diff --git a/yast.rules b/yast.rules
index dec77c5..e46f48b 100644
--- a/yast.rules
+++ b/yast.rules
@@ -1,24 +1,24 @@
 
 include module.rule
 
-create repository yast-${MODULE}
+create repository yast-${MODULE_NEW_NAME}
 end repository
 
-match /trunk/${MODULE}/
-  repository yast-${MODULE}
+match /trunk/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
   branch master
   # provide proper prefix path for commits with empty paths - see below as well
   prefix /
 end match
 match /trunk/
-  repository yast-${MODULE}
+  repository yast-${MODULE_NEW_NAME}
   branch master
   prefix /
 end match
 
-match /tags/stable-([^/]+)/${MODULE}/
-  repository yast-${MODULE}
-  branch refs/tags/yast-${MODULE}/\1
+match /tags/stable-([^/]+)/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
+  branch refs/tags/yast-${MODULE_NEW_NAME}/\1
   annotated true
   prefix /
 end match
@@ -26,52 +26,52 @@ end match
 ######################
 
 #     /tags/SuSE-Linux-9_3-GM/storage/
-match /tags/SuSE-Linux-([^/]+)-GM/${MODULE}/
-  repository yast-${MODULE}
-  branch refs/tags/yast-${MODULE}/openSUSE-\1/GM
+match /tags/SuSE-Linux-([^/]+)-GM/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
+  branch refs/tags/yast-${MODULE_NEW_NAME}/openSUSE-\1/GM
   annotated true
   prefix /
 end match
 
 ####################
 
-match /branches/Moblin/${MODULE}/
-  repository yast-${MODULE}
+match /branches/Moblin/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
   branch Moblin
   prefix /
 end match
 match /branches/Moblin/$
-  repository yast-${MODULE}
+  repository yast-${MODULE_NEW_NAME}
   branch Moblin
 end match
 
-match /branches/REFACTORING-10_3/${MODULE}/
-  repository yast-${MODULE}
+match /branches/REFACTORING-10_3/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
   branch REFACTORING-10_3
   prefix /
 end match
 match /branches/REFACTORING-10_3/$
-  repository yast-${MODULE}
+  repository yast-${MODULE_NEW_NAME}
   branch REFACTORING-10_3
 end match
 
 
 # SuSE-Code-11-Branch
 # SuSE-Code-11-SP2-Branch
-match /branches/SuSE-Code-([^/]+)-Branch/${MODULE}/
-  repository yast-${MODULE}
-  branch Code-\1
+match /branches/SuSE-Code-([^/]+)-Branch/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
+  branch SuSE-Code-\1
   prefix /
 end match
 match /branches/SuSE-Code-([^/]+)-Branch/$
-  repository yast-${MODULE}
-  branch Code-\1
+  repository yast-${MODULE_NEW_NAME}
+  branch SuSE-Code-\1
 end match
 
 # /tags/branch-Code-11-SP1-2_17_38_2/product-creator
-match /tags/branch-Code-([^/]+)-([\d_]+)/${MODULE}/
-  repository yast-${MODULE}
-  branch refs/tags/yast-${MODULE}/Code-\1/\2
+match /tags/branch-Code-([^/]+)-([\d_]+)/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
+  branch refs/tags/yast-${MODULE_NEW_NAME}/Code-\1/\2
   annotated true
   prefix /
 end match
@@ -79,40 +79,40 @@ end match
 
 
 # SuSE-Linux-9_3-Branch
-match /branches/SuSE-Linux-([^/]+)-Branch/${MODULE}/
-  repository yast-${MODULE}
+match /branches/SuSE-Linux-([^/]+)-Branch/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
   branch openSUSE-\1
   prefix /
 end match
 match /branches/SuSE-Linux-([^/]+)-Branch/$
-  repository yast-${MODULE}
+  repository yast-${MODULE_NEW_NAME}
   branch openSUSE-\1
 end match
 
 # /tags/branch-Linux-11_4-2_20_5/storage/
-match /tags/branch-Linux-([\d_]+)-([\d_]+)/${MODULE}/
-  repository yast-${MODULE}
-  branch refs/tags/yast-${MODULE}/openSUSE-\1/\2
+match /tags/branch-Linux-([\d_]+)-([\d_]+)/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
+  branch refs/tags/yast-${MODULE_NEW_NAME}/openSUSE-\1/\2
   annotated true
   prefix /
 end match
 
 
-match /branches/SuSE-SLE-([^/]+)-Branch/${MODULE}/
-  repository yast-${MODULE}
+match /branches/SuSE-SLE-([^/]+)-Branch/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
   branch SLE-\1
   prefix /
 end match
 match /branches/SuSE-SLE-([^/]+)-Branch/$
-  repository yast-${MODULE}
+  repository yast-${MODULE_NEW_NAME}
   branch SLE-\1
 end match
 
 # /tags/branch-SLE-10-2_13_11_1/storage/
 # /tags/branch-SLE-10-SP2-2_13_207/storag..
-match /tags/branch-SLE-([^/]+)-([\d_]+)/${MODULE}/
-  repository yast-${MODULE}
-  branch refs/tags/yast-${MODULE}/SLE-\1/\2
+match /tags/branch-SLE-([^/]+)-([\d_]+)/${MODULE_REGEX}/
+  repository yast-${MODULE_NEW_NAME}
+  branch refs/tags/yast-${MODULE_NEW_NAME}/SLE-\1/\2
   annotated true
   prefix /
 end match
