Index: src/port1.0/portfetch.tcl
===================================================================
--- src/port1.0/portfetch.tcl	(revision 35686)
+++ src/port1.0/portfetch.tcl	(working copy)
@@ -301,6 +301,42 @@
     }
 }
 
+# sorts fetch_urls in order of ping time
+proc sortsites {args} {
+    global fetch_urls
+    set svnserver "svn.macports.org"
+
+    foreach {url_var distfile} $fetch_urls {
+        global portfetch::$url_var
+		if {![info exists $url_var]} {
+			ui_error [format [msgcat::mc "No defined site for tag: %s, using master_sites"] $url_var]
+			set url_var master_sites
+			global portfetch::$url_var
+		}
+		set urllist [set $url_var]
+        set pinglist {}
+
+        foreach site $urllist {
+            regexp {[a-zA-Z]+://([a-zA-Z0-9\.-]+)[(/?$)|(/.*)]} $site -> host
+            if { [string compare $host $svnserver] } {
+                if {[catch {exec ping -noq -c1 -t1 $host | grep round-trip | cut -d / -f 5} msecs]} {
+	                set msecs 10000; # ping failed, so put it last in the list
+                }
+            } else {
+                set msecs 20000; # always try macports svn last
+            }
+            lappend pinglist [ list $site $msecs ]
+        }
+
+        set pinglist [ lsort -real -index 1 $pinglist ]
+
+        set $url_var {}
+        foreach pair $pinglist {
+            lappend $url_var [lindex $pair 0]
+        }
+    }
+}
+
 # Perform the full checksites/checkpatchfiles/checkdistfiles sequence.
 # This method is used by distcheck target.
 proc checkfiles {args} {
@@ -310,6 +346,7 @@
 	checksites
 	checkpatchfiles
 	checkdistfiles
+	sortsites
 }
 
 

