[24195] trunk/base/src/port1.0/portsubmit.tcl

source_changes at macosforge.org source_changes at macosforge.org
Wed Apr 18 20:48:04 PDT 2007


Revision: 24195
          http://trac.macosforge.org/projects/macports/changeset/24195
Author:   jberry at macports.org
Date:     2007-04-18 20:48:04 -0700 (Wed, 18 Apr 2007)

Log Message:
-----------
A start at port submit

Modified Paths:
--------------
    trunk/base/src/port1.0/portsubmit.tcl

Modified: trunk/base/src/port1.0/portsubmit.tcl
===================================================================
--- trunk/base/src/port1.0/portsubmit.tcl	2007-04-19 03:47:49 UTC (rev 24194)
+++ trunk/base/src/port1.0/portsubmit.tcl	2007-04-19 03:48:04 UTC (rev 24195)
@@ -40,6 +40,26 @@
 
 set_ui_prefix
 
+
+proc xar_path {args} {
+	global prefix 
+    set xar ""
+    foreach path "${portutil::autoconf::xar_path} ${prefix}/bin/xar xar" {
+ 	if { [file executable ${path}] } {
+ 	   	  set xar $path
+ 	      break;
+ 	   }
+    }
+    if { "${xar}" == "" } {
+    	ui_error "The xar tool is required to submit ports"
+    	ui_error "Please install the xar port before proceeding."
+		return -code error [msgcat::mc "Submit failed"]
+    }
+    
+    return $xar
+}
+
+
 # escape quotes, and things that make the shell cry
 proc shell_escape {str} {
 	regsub -all -- {\\} $str {\\\\} str
@@ -48,8 +68,120 @@
 	return $str
 }
 
+
+proc putel { fd el data } {
+	# Quote xml data
+	set quoted [string map  { & &amp; < &lt; > &gt; } $data]
+	# Write the element
+	puts $fd "<${el}>${quoted}</${el}>"
+}
+
+
+proc putlist { fd listel itemel list } {
+	puts $fd "<$listel>"
+	foreach item $list {
+		putel $fd $itemel $item
+	}
+	puts $fd "</$listel>"
+}
+
+
+proc create_portpkg {} {
+    global portname portversion prefix UI_PREFIX workpath portpath
+
+	set xar [xar_path]
+	
+    set dirname "portpkg"
+    set dirpath "${workpath}/${dirname}"
+    set pkgpath "${workpath}/portpkg.xar"
+    set metaname "portpkg.meta"
+    set metapath "${workpath}/${metaname}"
+    
+    # Expose and default some global variables
+    set vars " portname portversion maintainers categories description \
+    	long_description master_sites homepage epoch version revision \
+    	PortInfo \
+    	submitter_name submitter_email submitter_key \
+    	"
+	eval "global $vars"
+	foreach var $vars {
+		if {![info exists $var]} { set $var {} }
+	}
+
+    # Make sure our workpath is clean
+    file delete -force $dirpath $metapath $pkgpath
+    
+    # Create the portpkg directory
+    file mkdir $dirpath
+
+    # Move in the Portfile
+    file copy Portfile ${dirpath}
+    
+    # Move in files    
+    if {[file isdirectory "files"]} {
+        file copy files ${dirpath}
+    }
+    
+    # Create the metadata subdoc
+    set sd [open ${metapath} w]
+    puts $sd "<portpkg version='1'>"
+    
+		puts $sd "<submitter>"
+			putel $sd name $submitter_name
+			putel $sd email $submitter_email
+			putel $sd notes ""
+		puts $sd "</submitter>"
+		
+		puts $sd "<package>"
+			putel $sd name $portname
+			putel $sd homepage $homepage
+			putlist $sd categories category $categories
+			putlist $sd maintainers maintainer $maintainers
+			
+			putel $sd epoch $epoch
+			putel $sd version $version
+			putel $sd revision $revision
+			
+			putel $sd description $description
+			putel $sd long_description $long_description
+		
+			# TODO: variants has platforms in it
+			putlist $sd variants variant $PortInfo(variants)
+			
+			# TODO: Dependencies and platforms
+			#putel $sd dependencies ""
+			#putel $sd platforms ""
+			
+		puts $sd "</package>"
+		
+    puts $sd "</portpkg>"
+    close $sd
+    
+    # Create portpkg.xar, including the metadata and the portpkg directory contents
+    set cmd "cd ${workpath}; ${xar} -cf ${pkgpath} ${dirname} -s ${metapath} -n ${metaname}"
+    if {[system $cmd] != ""} {
+		return -code error [format [msgcat::mc "Failed to create portpkg for port : %s"] $portname]
+    }
+    
+    return
+}
+
+
 proc submit_main {args} {
     global portname portversion prefix UI_PREFIX workpath portpath
+  
+   	# Create portpkg.xar in the work direcotory
+   	create_portpkg
+   	
+   	# If a private key was provided, create a signed digest of the submission
+   	# TODO
+   	
+   	# Submit to the submit url
+   	
+   	# 
+    return
+    
+    # REMNANTS OF KEVIN'S CODE
 
     # start with the Portfile, and add the files directory if it exists.
     # don't pick up any CVS directories, or .DS_Store turds
@@ -95,7 +227,8 @@
     puts ""
     exec stty echo
     
-    set vars {portname portversion maintainers categories description long_description master_sites}
+    set vars {portname portversion maintainers categories description \
+    	long_description master_sites}
 	eval "global $vars"
 	foreach var $vars {
 		if {![info exists $var]} { set $var {} }

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20070418/c9ad7f2a/attachment.html


More information about the macports-changes mailing list