Browse Source

Add testport target to Rakefile

Douglas Thrift 8 months ago
parent
commit
656a05e011
1 changed files with 44 additions and 0 deletions
  1. 44 0
      Rakefile

+ 44 - 0
Rakefile

@@ -43,6 +43,14 @@ def update_portstree_map(map = {})
   map
 end
 
+def clean_version(version)
+  if version =~ /^(\d+\.\d+-RELEASE)(?:-p\d+)$/
+    $1
+  else
+    version
+  end
+end
+
 portstree_map = update_portstree_map
 portsdir = @portsdir = Pathname.pwd
 distdir = portsdir.join('distfiles')
@@ -127,6 +135,42 @@ task diff: :update_svnhead do |_, args|
   end
 end
 
+desc 'Test the port with poudriere'
+task :testport, %i(jailname flavor) => :update_githead do |_, args|
+  this_version = clean_version(`uname -r`.chomp)
+  this_arch = `uname -m`.chomp
+  this_jailname = nil
+  `poudriere jail -l -q`.each_line do |line|
+    line.chomp!
+    if line =~ /^([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+).+$/
+      jailname, version, arch, method = $1, $2, $3, $4
+      if clean_version(version) == this_version && arch == this_arch && method == 'ftp'
+        this_jailname = jailname
+        break
+      end
+    else
+      raise "unexpected line: #{line}"
+    end
+  end
+  args.with_defaults(jailname: this_jailname)
+  in_portdir do |portdir|
+    files = `git ls-files`.each_line.map {|line| Pathname.new(line.chomp)}
+    in_portstree(githead_portstree) do |path|
+      rel_portdir = portdir.relative_path_from(portsdir)
+      githead_portdir = path.join(rel_portdir)
+      sh "sudo mkdir -p #{githead_portdir}"
+      Dir.chdir(githead_portdir) do
+        files.each do |file|
+          portdir_file = portdir.join(file)
+          sh "sudo mkdir -p #{file.dirname}" unless file.dirname.exist?
+          sh "sudo cp #{portdir_file} #{file}"
+        end
+      end
+      sh "sudo poudriere testport -j #{args.jailname} -o #{rel_portdir}#{args.flavor && "@#{args.flavor}"} -p githead"
+    end
+  end
+end
+
 {githead: 'git+https', svnhead: 'svn+https'}.each do |name, method|
   define_method("#{name}_portstree") do
     portstree_map[name]