[Osgeo4w-commits] r1110 - trunk/apt

svn_osgeo4w at osgeo.org svn_osgeo4w at osgeo.org
Sun Feb 15 14:57:42 EST 2009


Author: maphew
Date: 2009-02-15 14:57:41 -0500 (Sun, 15 Feb 2009)
New Revision: 1110

Modified:
   trunk/apt/apt.py
Log:
improve remove: 
+ add 'etc/postinstall/*.done' to list of installed files (incomplete, overwrites instead of append; commented out)

BUG: 'apt remove' with no args does not return err about needing package name

Modified: trunk/apt/apt.py
===================================================================
--- trunk/apt/apt.py	2009-02-11 07:50:21 UTC (rev 1109)
+++ trunk/apt/apt.py	2009-02-15 19:57:41 UTC (rev 1110)
@@ -27,9 +27,9 @@
 
 OSGEO4W_ROOT = ''
 if 'OSGEO4W_ROOT' in os.environ.keys ():
-	OSGEO4W_ROOT = os.environ['OSGEO4W_ROOT']
-	os.putenv('OSGEO4W_ROOT_MSYS', OSGEO4W_ROOT) # textreplace.exe needs this (post_install)
-	OSGEO4W_ROOT = string.replace(OSGEO4W_ROOT, '\\', '/') # convert backslash to foreslash
+   OSGEO4W_ROOT = os.environ['OSGEO4W_ROOT']
+   os.putenv('OSGEO4W_ROOT_MSYS', OSGEO4W_ROOT) # textreplace.exe needs this (post_install)
+   OSGEO4W_ROOT = string.replace(OSGEO4W_ROOT, '\\', '/') # convert backslash to foreslash
 else:
    sys.stderr.write ('error: Please set OSGEO4W_ROOT\n')
    sys.exit (2)
@@ -60,19 +60,19 @@
 
 
 def usage ():
-	# FIXME: list only usable command line parameters, not all functions
+   # FIXME: list only usable command line parameters, not all functions
     # SOLVED: omit '''comment''' after function name, only those are listed 
-	sys.stdout.write ('''apt [OPTION]... COMMAND [PACKAGE]...
+   sys.stdout.write ('''apt [OPTION]... COMMAND [PACKAGE]...
 
 Commands:
 ''')
-	d = __main__.__dict__
-	commands = filter (lambda x:
-			   type (d[x]) == type (usage) and d[x].__doc__, d)
-	sys.stdout.writelines (map (lambda x:
-				    "    %s - %s\n" % (x, d[x].__doc__),
-			       psort (commands)))
-	sys.stdout.write (r'''
+   d = __main__.__dict__
+   commands = filter (lambda x:
+            type (d[x]) == type (usage) and d[x].__doc__, d)
+   sys.stdout.writelines (map (lambda x:
+                "    %s - %s\n" % (x, d[x].__doc__),
+                psort (commands)))
+   sys.stdout.write (r'''
 Options:
     -d,--download          download only
     -i,--ini=FILE          use setup.ini [%(setup_ini)s]
@@ -81,575 +81,580 @@
     -t,--t=NAME            set dist name (*curr*, test, prev)
     -x,--no-deps           ignore dependencies
 ''')
-			  
+           
 (options, files) = getopt.getopt (sys.argv[1:],
-				  'dhi:m:r:t:x',
-				  ('download', 'help', 'mirror=', 'root='
-				   'ini=', 't=', 'no-deps'))
+              'dhi:m:r:t:x',
+              ('download', 'help', 'mirror=', 'root='
+               'ini=', 't=', 'no-deps'))
 
 command = 'help'
 if len (files) > 0:
-	command = files[0]
+   command = files[0]
 
 packagename = 0
 if len (files) > 1:
-	packagename = files[1]
+   packagename = files[1]
 
 distname = 'curr'
 
 depend_p = 0
 download_p = 0
 for i in options:
-	o = i[0]
-	a = i[1]
+   o = i[0]
+   a = i[1]
 
-	if 0:
-		pass
-	elif o == '--download' or o == '-d':
-	        download_p = 1
-	elif o == '--help' or o == '-h':
-		command = 'help'
-		break
-	elif o == '--ini' or o == '-i':
-		setup_ini = a
-	elif o == '--mirror' or o == '-m':
-		mirror = a
-	elif o == '--root' or o == '-r':
-		root = a
-	elif o == '--t' or o == '-t':
-		distname = a
-	elif o == '--no-deps' or o == '-x':
-		depend_p = 1
+   if 0:
+      pass
+   elif o == '--download' or o == '-d':
+           download_p = 1
+   elif o == '--help' or o == '-h':
+      command = 'help'
+      break
+   elif o == '--ini' or o == '-i':
+      setup_ini = a
+   elif o == '--mirror' or o == '-m':
+      mirror = a
+   elif o == '--root' or o == '-r':
+      root = a
+   elif o == '--t' or o == '-t':
+      distname = a
+   elif o == '--no-deps' or o == '-x':
+      depend_p = 1
 
 def version_to_string (t):
-	#return '%s-%s' % (string.join (map (lambda x: "%d" % x, t[:-1]), '.'),
-	#		  t[-1])
-	def try_itoa (x):
-		if type (x) == int:
-			return "%d" % x
-		return x
-	return '%s-%s' % (string.join (map (try_itoa, t[:-1]), '.'),
-			  t[-1])
+   #return '%s-%s' % (string.join (map (lambda x: "%d" % x, t[:-1]), '.'),
+   #		  t[-1])
+   def try_itoa (x):
+      if type (x) == int:
+         return "%d" % x
+      return x
+   return '%s-%s' % (string.join (map (try_itoa, t[:-1]), '.'),
+           t[-1])
 
 def string_to_version (s):
-	# bash-2.05b-9
-	# return map (string.atoi, (string.split (re.sub ('[.-]', ' ', s))))
-	s = re.sub ('([^0-9][^0-9]*)', ' \\1 ', s)
-	s = re.sub ('[ .-][ .-]*', ' ', s)
-	def try_atoi (x):
-		if re.match ('^[0-9]*$', x):
-			return string.atoi (x)
-		return x
-	return tuple (map (try_atoi, (string.split (s, ' '))))
+   # bash-2.05b-9
+   # return map (string.atoi, (string.split (re.sub ('[.-]', ' ', s))))
+   s = re.sub ('([^0-9][^0-9]*)', ' \\1 ', s)
+   s = re.sub ('[ .-][ .-]*', ' ', s)
+   def try_atoi (x):
+      if re.match ('^[0-9]*$', x):
+         return string.atoi (x)
+      return x
+   return tuple (map (try_atoi, (string.split (s, ' '))))
 
 def split_ball (p):
-	# mc-4.6.0a-20030721-1.tar.bz2
-	#m = re.match ('^([^.]*)-([0-9][^-/]*-[0-9][0-9]*)(.tar.bz2)?$', p)
-	m = re.match ('^([^.]*)-([0-9].*-[0-9][0-9]*)(.tar.bz2)?$', p)
-	return (m.group (1), string_to_version (m.group (2)))
+   # mc-4.6.0a-20030721-1.tar.bz2
+   #m = re.match ('^([^.]*)-([0-9][^-/]*-[0-9][0-9]*)(.tar.bz2)?$', p)
+   m = re.match ('^([^.]*)-([0-9].*-[0-9][0-9]*)(.tar.bz2)?$', p)
+   return (m.group (1), string_to_version (m.group (2)))
 
 def join_ball (t):
-	return t[0] + '-' + version_to_string (t[1])
+   return t[0] + '-' + version_to_string (t[1])
 
 ###########################
 
 
 def debug (s):
-	s
+   s
 
 def help ():
-	'''help COMMAND'''
-	if len (files) < 2:
-		usage ()
-		sys.exit (0)
+   '''help COMMAND'''
+   if len (files) < 2:
+      usage ()
+      sys.exit (0)
 
-	print  __main__.__dict__[packagename].__doc__
+   print  __main__.__dict__[packagename].__doc__
 
 dists = 0
 distnames = ('curr', 'test', 'prev')
 def get_setup_ini ():
-	global dists
-	if dists:
-		return
-	dists = {'test': {}, 'curr': {}, 'prev' : {}}
-	chunks = string.split (open (setup_ini).read (), '\n\n@ ')
-	for i in chunks[1:]:
-		lines = string.split (i, '\n')
-		name = string.strip (lines[0])
-		debug ('package: ' + name)
-		packages = dists['curr']
-		records = {'sdesc': name}
-		j = 1
-		while j < len (lines) and string.strip (lines[j]):
-			debug ('raw: ' + lines[j])
-			if lines[j][0] == '#':
-				j = j + 1
-				continue
-			elif lines[j][0] == '[':
-				debug ('dist: ' + lines[j][1:5])
-				packages[name] = records.copy ()
-				packages = dists[lines[j][1:5]]
-				j = j + 1
-				continue
+   global dists
+   if dists:
+      return
+   dists = {'test': {}, 'curr': {}, 'prev' : {}}
+   chunks = string.split (open (setup_ini).read (), '\n\n@ ')
+   for i in chunks[1:]:
+      lines = string.split (i, '\n')
+      name = string.strip (lines[0])
+      debug ('package: ' + name)
+      packages = dists['curr']
+      records = {'sdesc': name}
+      j = 1
+      while j < len (lines) and string.strip (lines[j]):
+         debug ('raw: ' + lines[j])
+         if lines[j][0] == '#':
+            j = j + 1
+            continue
+         elif lines[j][0] == '[':
+            debug ('dist: ' + lines[j][1:5])
+            packages[name] = records.copy ()
+            packages = dists[lines[j][1:5]]
+            j = j + 1
+            continue
 
-			try:
-				key, value = map (string.strip,
-					  string.split (lines[j], ': ', 1))
-			except:
-				print lines[j]
-				raise 'URG'
-			if value[0] == '"' and value.find ('"', 1) == -1:
-				while 1:
-					j = j + 1
-					value += lines[j]
-					if lines[j].find ('"') != -1:
-						break
-			records[key] = value
-			j = j + 1
-		packages[name] = records
-		
+         try:
+            key, value = map (string.strip,
+                 string.split (lines[j], ': ', 1))
+         except:
+            print lines[j]
+            raise 'URG'
+         if value[0] == '"' and value.find ('"', 1) == -1:
+            while 1:
+               j = j + 1
+               value += lines[j]
+               if lines[j].find ('"') != -1:
+                  break
+         records[key] = value
+         j = j + 1
+      packages[name] = records
+      
 def get_url ():
-	if not dists[distname].has_key (packagename) \
-	   or not dists[distname][packagename].has_key (INSTALL):
-		no_package ()
-		install = 0
-		for d in distnames:
-			if dists[d].has_key (packagename) \
-			   and dists[d][packagename].has_key (INSTALL):
-				install = dists[d][packagename][INSTALL]
-				sys.stderr.write ("warning: using [%s]\n" % d)
-				break
-		if not install:
-			sys.stderr.write ("error: %s no install\n" % packagename)
-			sys.exit (1)
-	else:
-		install = dists[distname][packagename][INSTALL]
-	file, size, md5 = string.split (install)
-	return file, md5
+   if not dists[distname].has_key (packagename) \
+      or not dists[distname][packagename].has_key (INSTALL):
+      no_package ()
+      install = 0
+      for d in distnames:
+         if dists[d].has_key (packagename) \
+            and dists[d][packagename].has_key (INSTALL):
+            install = dists[d][packagename][INSTALL]
+            sys.stderr.write ("warning: using [%s]\n" % d)
+            break
+      if not install:
+         sys.stderr.write ("error: %s no install\n" % packagename)
+         sys.exit (1)
+   else:
+      install = dists[distname][packagename][INSTALL]
+   file, size, md5 = string.split (install)
+   return file, md5
 
 def url ():
-	'''print tarball url'''
-	print get_url ()[0]
+   '''print tarball url'''
+   print get_url ()[0]
 
 def get_ball ():
-	url, md5 = get_url ()
-	return '%s/%s' % (downloads, url)
+   url, md5 = get_url ()
+   return '%s/%s' % (downloads, url)
 
 def ball ():
-	'''print tarball name'''
-	print get_ball ()
-	
+   '''print tarball name'''
+   print get_ball ()
+   
 def down_stat(count, blockSize, totalSize):
-	# report download progress
-	#courtesy of http://stackoverflow.com/questions/51212/how-to-write-a-download-progress-indicator-in-python
+   # report download progress
+   #courtesy of http://stackoverflow.com/questions/51212/how-to-write-a-download-progress-indicator-in-python
    #FIXME: sometmes percent goes over 100!
-	percent = int(count*blockSize*100/totalSize)
-	sys.stdout.write("\r...%d%%" % percent)
-	sys.stdout.flush()
+   percent = int(count*blockSize*100/totalSize)
+   sys.stdout.write("\r...%d%%" % percent)
+   sys.stdout.flush()
 
 def do_download ():
-	url, md5 = get_url ()
-	dir = '%s/%s' % (downloads, os.path.split (url)[0])
-	srcFile = os.path.join (mirror + '/' + url)
-	dstFile = os.path.join (downloads + '/' + url)
+   url, md5 = get_url ()
+   dir = '%s/%s' % (downloads, os.path.split (url)[0])
+   srcFile = os.path.join (mirror + '/' + url)
+   dstFile = os.path.join (downloads + '/' + url)
 
-	if not os.path.exists (get_ball ()): #or not check_md5 ():
-		print '\nFetching %s' % srcFile
+   if not os.path.exists (get_ball ()): #or not check_md5 ():
+      print '\nFetching %s' % srcFile
 
-		if not os.path.exists (dir):
-			os.makedirs (dir)
-		## CHANGED: use urllib instead of wget, was:
-		#status = os.system ('cd %s && wget -c %s/%s' % (dir, mirror, url))
-		status = urllib.urlretrieve(srcFile, dstFile, down_stat)
-		
-		### The following is broken because of urllib change,
-		### maybe not needed?
-		## successful pipe close returns 'None'
-		#if not status:
-		#   status = 0
-		#signal = 0x0f + status
-		### exit_status = status >> 8
-		#if status:
-		#   raise 'urg'
+      if not os.path.exists (dir):
+         os.makedirs (dir)
+      ## CHANGED: use urllib instead of wget, was:
+      #status = os.system ('cd %s && wget -c %s/%s' % (dir, mirror, url))
+      status = urllib.urlretrieve(srcFile, dstFile, down_stat)
+      
+      ### The following is broken because of urllib change,
+      ### maybe not needed?
+      ## successful pipe close returns 'None'
+      #if not status:
+      #   status = 0
+      #signal = 0x0f + status
+      ### exit_status = status >> 8
+      #if status:
+      #   raise 'urg'
 
 def download ():
-	'''download package'''
-	do_download ()
-	ball ()
-	print
-	md5 ()
-	
+   '''download package'''
+   do_download ()
+   ball ()
+   print
+   md5 ()
+   
 def no_package (s='error'):
-	sys.stderr.write ("%s: %s not in [%s]\n" % (s, packagename, distname))
+   sys.stderr.write ("%s: %s not in [%s]\n" % (s, packagename, distname))
 
 def get_requires ():
-	dist = dists[distname]
-	if not dists[distname].has_key (packagename):
-		no_package ('warning')
-		#return []
-		sys.exit (1)
-	if depend_p:
-		return [packagename]
-	reqs = {packagename:0}
-	n = 0
-	while len (reqs) > n:
-		n = len (reqs)
-		for i in reqs.keys ():
-			if not dist.has_key (i):
-				sys.stderr.write ("error: %s not in [%s]\n" \
-						  % (i, distname))
-				if i != packagename:
-					del reqs[i]
-				continue
-			reqs[i] = '0'
-			p = dist[i]
-			if not p.has_key ('requires'):
-				continue
-			reqs.update (dict (map (lambda x: (x, 0),
-						string.split (p['requires']))))
-	return reqs.keys ()
+   dist = dists[distname]
+   if not dists[distname].has_key (packagename):
+      no_package ('warning')
+      #return []
+      sys.exit (1)
+   if depend_p:
+      return [packagename]
+   reqs = {packagename:0}
+   n = 0
+   while len (reqs) > n:
+      n = len (reqs)
+      for i in reqs.keys ():
+         if not dist.has_key (i):
+            sys.stderr.write ("error: %s not in [%s]\n" \
+                    % (i, distname))
+            if i != packagename:
+               del reqs[i]
+            continue
+         reqs[i] = '0'
+         p = dist[i]
+         if not p.has_key ('requires'):
+            continue
+         reqs.update (dict (map (lambda x: (x, 0),
+                  string.split (p['requires']))))
+   return reqs.keys ()
 
 def requires ():
-	'''print requires: for package'''
-	print string.join (get_requires (), '\n')
+   '''print requires: for package'''
+   print string.join (get_requires (), '\n')
 
 installed = 0
 def get_installed ():
-	global installed
-	if installed:
-		return installed
-	installed = {0:{}}
-	for i in open (installed_db).readlines ()[1:]:
-		name, ball, status = string.split (i)
-		installed[int (status)][name] = ball
-	return installed
+   global installed
+   if installed:
+      return installed
+   installed = {0:{}}
+   for i in open (installed_db).readlines ()[1:]:
+      name, ball, status = string.split (i)
+      installed[int (status)][name] = ball
+   return installed
 
 def write_installed ():
-	file = open (installed_db, 'w')
-	file.write (installed_db_magic)
-	file.writelines (map (lambda x: '%s %s 0\n' % (x, installed[0][x]),
-			      installed[0].keys ()))
-	if file.close ():
-		raise 'urg'
+   file = open (installed_db, 'w')
+   file.write (installed_db_magic)
+   file.writelines (map (lambda x: '%s %s 0\n' % (x, installed[0][x]),
+               installed[0].keys ()))
+   if file.close ():
+      raise 'urg'
 
 def get_field (field, default=''):
-	for d in (distname,) + distnames:
-		if dists[d].has_key (packagename) \
-		   and dists[d][packagename].has_key (field):
-			return dists[d][packagename][field]
-	return default
+   for d in (distname,) + distnames:
+      if dists[d].has_key (packagename) \
+         and dists[d][packagename].has_key (field):
+         return dists[d][packagename][field]
+   return default
 
 def psort (lst):
-	plist.sort (lst)
-	return lst
+   plist.sort (lst)
+   return lst
 
 #urg
 plist = list
 def list ():
-	'''installed packages'''
-	global packagename
-	for packagename in psort (installed[0].keys ()):
-		ins = get_installed_version ()
-		new = 0
-		if dists[distname].has_key (packagename) \
-		   and dists[distname][packagename].has_key (INSTALL):
-			new = get_version ()
-		s = '%-20s%-15s' % (packagename, version_to_string (ins))
-		if new and new != ins:
-			s += '(%s)' % version_to_string (new)
-		print s
+   '''installed packages'''
+   global packagename
+   for packagename in psort (installed[0].keys ()):
+      ins = get_installed_version ()
+      new = 0
+      if dists[distname].has_key (packagename) \
+         and dists[distname][packagename].has_key (INSTALL):
+         new = get_version ()
+      s = '%-20s%-15s' % (packagename, version_to_string (ins))
+      if new and new != ins:
+         s += '(%s)' % version_to_string (new)
+      print s
 
 # CHANGED: pythonized rm,mv,wget which do not always exist on windows
 def update ():
-	'''setup.ini'''
-	if not os.path.exists (downloads):
-		os.makedirs (downloads)
+   '''setup.ini'''
+   if not os.path.exists (downloads):
+      os.makedirs (downloads)
 
-	# remove cached ini
-	if os.path.exists (downloads + 'setup.ini'):
-		os.remove (downloads + 'setup.ini')
+   # remove cached ini
+   if os.path.exists (downloads + 'setup.ini'):
+      os.remove (downloads + 'setup.ini')
 
-	# get current ini
-	f = urllib.urlretrieve(mirror + '/setup.ini', downloads + 'setup.ini', down_stat)
-	
-	if os.path.exists (setup_ini):
-		# backup existing setup config
-		if os.path.exists (setup_bak):
-				os.remove (setup_bak)
-		os.rename (setup_ini, setup_bak)
+   # get current ini
+   f = urllib.urlretrieve(mirror + '/setup.ini', downloads + 'setup.ini', down_stat)
+   
+   if os.path.exists (setup_ini):
+      # backup existing setup config
+      if os.path.exists (setup_bak):
+            os.remove (setup_bak)
+      os.rename (setup_ini, setup_bak)
 
-	# move new setup to config
-	os.rename(downloads + 'setup.ini', setup_ini)
+   # move new setup to config
+   os.rename(downloads + 'setup.ini', setup_ini)
 
 def get_version ():
-	if not dists[distname].has_key (packagename) \
-	   or not dists[distname][packagename].has_key (INSTALL):
-		no_package ()
-		return (0, 0)
-		
-	package = dists[distname][packagename]
-	if not package.has_key ('ver'):
-		file = string.split (package[INSTALL])[0]
-		ball = os.path.split (file)[1]
-		package['ver'] = split_ball (ball)[1]
-	return package['ver']
-	
+   if not dists[distname].has_key (packagename) \
+      or not dists[distname][packagename].has_key (INSTALL):
+      no_package ()
+      return (0, 0)
+      
+   package = dists[distname][packagename]
+   if not package.has_key ('ver'):
+      file = string.split (package[INSTALL])[0]
+      ball = os.path.split (file)[1]
+      package['ver'] = split_ball (ball)[1]
+   return package['ver']
+   
 def get_installed_version ():
-	return split_ball (installed[0][packagename])[1]
+   return split_ball (installed[0][packagename])[1]
 
 def version ():
-	'''print installed version'''
-	global packagename
-	for packagename in psort (installed[0].keys ()):
-		if not installed[0].has_key (packagename):
-			global distname
-			distname = 'installed'
-			no_package ()
-			sys.exit (1)
-		print '%-20s%-12s' % (packagename,
-				 version_to_string (get_installed_version ()))
-	
+   '''print installed version'''
+   global packagename
+   for packagename in psort (installed[0].keys ()):
+      if not installed[0].has_key (packagename):
+         global distname
+         distname = 'installed'
+         no_package ()
+         sys.exit (1)
+      print '%-20s%-12s' % (packagename,
+             version_to_string (get_installed_version ()))
+   
 def get_new ():
-	global packagename
-	lst = []
-	for packagename in installed[0].keys ():
-		new = get_version ()
-		ins = get_installed_version ()
-		if new > ins:
-			debug (" %s > %s" % (new, ins))
-			lst.append (packagename)
-	return lst
+   global packagename
+   lst = []
+   for packagename in installed[0].keys ():
+      new = get_version ()
+      ins = get_installed_version ()
+      if new > ins:
+         debug (" %s > %s" % (new, ins))
+         lst.append (packagename)
+   return lst
 
 def new ():
-	'''list new packages in distribution'''
-	#print string.join (get_new (), '\n')
-	global packagename
-	for packagename in psort (get_new ()):
-		print '%-20s%-12s' % (packagename,
-				      version_to_string (get_version ()))
-		
+   '''list new packages in distribution'''
+   #print string.join (get_new (), '\n')
+   global packagename
+   for packagename in psort (get_new ()):
+      print '%-20s%-12s' % (packagename,
+                  version_to_string (get_version ()))
+      
 def md5 ():
-	'''check md5 sum'''
-	url, md5 = get_url ()
-	ball = os.path.basename (url)
-	print '%s  %s' % (md5, ball)
+   '''check md5 sum'''
+   url, md5 = get_url ()
+   ball = os.path.basename (url)
+   print '%s  %s' % (md5, ball)
 
-	# make sure we md5 the *file* not the *filename*
+   # make sure we md5 the *file* not the *filename*
     # kudos to http://www.peterbe.com/plog/using-md5-to-check-equality-between-files
-	localFile = file(os.path.join(downloads + url), 'rb')
-	my_md5 = hashlib.md5(localFile.read()).hexdigest()
-	
-	print '%s  %s' % (my_md5, ball)
-	if md5 != my_md5:
-		raise 'URG'
-	
+   localFile = file(os.path.join(downloads + url), 'rb')
+   my_md5 = hashlib.md5(localFile.read()).hexdigest()
+   
+   print '%s  %s' % (my_md5, ball)
+   if md5 != my_md5:
+      raise 'URG'
+   
 def search ():
-	'''search package list'''
-	global packagename
-	regexp = packagename
-	packages = []
-	keys = []
-	if distname in dists:
-		keys = dists[distname].keys ()
-	else:
-		for i in dists.keys ():
-			for j in dists[i].keys ():
-				if not j in keys:
-					keys.append (j)
-	for i in keys:
-		if not regexp or re.search (regexp, i):
-			if distname in dists:
-				if dists[distname][i].has_key (INSTALL):
-					packages.append (i)
-			else:
-				packages.append (i)
-	for packagename in psort (packages):
-		s = packagename
-		d = get_field ('sdesc') 
-		if d:
-			s += ' - %s' % d[1:-1]
-		print s
+   '''search package list'''
+   global packagename
+   regexp = packagename
+   packages = []
+   keys = []
+   if distname in dists:
+      keys = dists[distname].keys ()
+   else:
+      for i in dists.keys ():
+         for j in dists[i].keys ():
+            if not j in keys:
+               keys.append (j)
+   for i in keys:
+      if not regexp or re.search (regexp, i):
+         if distname in dists:
+            if dists[distname][i].has_key (INSTALL):
+               packages.append (i)
+         else:
+            packages.append (i)
+   for packagename in psort (packages):
+      s = packagename
+      d = get_field ('sdesc') 
+      if d:
+         s += ' - %s' % d[1:-1]
+      print s
 
 def get_missing ():
-	reqs = get_requires ()
-	lst = []
-	for i in reqs:
-		if not installed[0].has_key (i):
-			lst.append (i)
-	if lst and packagename not in lst:
-		sys.stderr.write ('warning: missing packages: %s\n' % string.join (lst))
-	elif installed[0].has_key (packagename):
-		ins = get_installed_version ()
-		new = get_version ()
-		if ins >= new:
-			sys.stderr.write ('%s is already the newest version\n' % packagename)
-			#lst.remove (packagename)
-		elif packagename not in lst:
-			lst.append (packagename)
-	return lst
+   reqs = get_requires ()
+   lst = []
+   for i in reqs:
+      if not installed[0].has_key (i):
+         lst.append (i)
+   if lst and packagename not in lst:
+      sys.stderr.write ('warning: missing packages: %s\n' % string.join (lst))
+   elif installed[0].has_key (packagename):
+      ins = get_installed_version ()
+      new = get_version ()
+      if ins >= new:
+         sys.stderr.write ('%s is already the newest version\n' % packagename)
+         #lst.remove (packagename)
+      elif packagename not in lst:
+         lst.append (packagename)
+   return lst
 
 def missing ():
-	'''print missing dependencies'''
-	print string.join (get_missing (), '\n')
+   '''print missing dependencies'''
+   print string.join (get_missing (), '\n')
 
 # CHANGED: pythonized tar
 def do_install ():
-	# find ball
-	ball = get_ball ()
-	## was:
-	#pipe = os.popen ('tar -C %s -xjvf %s' % (root, ball), 'r')
-	os.chdir (root)
-	pipe = tarfile.open (ball,'r:bz2')
-	## was:
-	#lst = map (string.strip, pipe.readlines ())
-	lst = pipe.getnames()
-	pipe.extractall()
-	pipe.close()
+   # find ball
+   ball = get_ball ()
+   ## was:
+   #pipe = os.popen ('tar -C %s -xjvf %s' % (root, ball), 'r')
+   os.chdir (root)
+   pipe = tarfile.open (ball,'r:bz2')
+   ## was:
+   #lst = map (string.strip, pipe.readlines ())
+   lst = pipe.getnames()
+   pipe.extractall()
+   pipe.close()
 
-	if pipe.close ():
-		raise 'urg'
-	# write list
-	write_filelist (lst)
-	
-	# configure...
-	if os.path.isdir ('%s/etc/postinstall' % root):
-		## was:
-		#post = os.listdir ('%s/etc/postinstall' % root)
-		post = glob.glob ('%s/etc/postinstall/*.bat' % root)
-		if post:
-			#print '\nThe tasks below are unfinished, please follow up manually:'
-			#sys.stderr.write ('not run:\t%s' % string.join (map (lambda x: '%s' % x, post)))
-			#print
-			post_install () # CHANGED: run postinstall .bat automatically
-	#update installed[]
-	installed[0][packagename] = os.path.basename (ball)
-	# write installed.db
-	write_installed ()
+   if pipe.close ():
+      raise 'urg'
+   # record list of files installed
+   write_filelist (lst)
+   
+   # configure...
+   if os.path.isdir ('%s/etc/postinstall' % root):
+      ## was:
+      #post = os.listdir ('%s/etc/postinstall' % root)
+      post = glob.glob ('%s/etc/postinstall/*.bat' % root)
+      if post:
+         #print '\nThe tasks below are unfinished, please follow up manually:'
+         #sys.stderr.write ('not run:\t%s' % string.join (map (lambda x: '%s' % x, post)))
+         #print
+         post_install () # CHANGED: run postinstall .bat automatically
+   #update installed[]
+   installed[0][packagename] = os.path.basename (ball)
+   # write installed.db
+   write_installed ()
 
 # NEW
 def post_install ():
-	# for postinstall *.bat: run x.bat, rename x.bat x.bat.done
-	# adapted from "17.1.3.3 Replacing os.system()"
-	# http://www.python.org/doc/2.5.2/lib/node536.html
-	
-	os.chdir(root)
-	
-	# necessary for textreplace, xmklink
-	os.putenv('PATH', '%s\\bin' % os.path.normpath(OSGEO4W_ROOT))
+   # for postinstall *.bat: run x.bat, rename x.bat x.bat.done
+   # adapted from "17.1.3.3 Replacing os.system()"
+   # http://www.python.org/doc/2.5.2/lib/node536.html
 
-	for bat in glob.glob ('%s/etc/postinstall/*.bat' % root):
-		try:
-			retcode = subprocess.call (bat, shell=True)
-			if retcode < 0:
-			  print >>sys.stderr, "Child was terminated by signal", -retcode
-			else:
-			  #print >>sys.stderr, "Child returned", retcode
-			  print >>sys.stderr, "Post_install complete, return code", retcode
-			  os.rename (bat, bat + '.done')
-		except OSError, e:
-			print >>sys.stderr, "Execution failed:", e
+   os.chdir(root)
 
+   # necessary for textreplace, xmklink
+   os.putenv('PATH', '%s\\bin' % os.path.normpath(OSGEO4W_ROOT))
+
+   for bat in glob.glob ('%s/etc/postinstall/*.bat' % root):
+      try:
+         retcode = subprocess.call (bat, shell=True)
+         if retcode < 0:
+           print >>sys.stderr, "Child was terminated by signal", -retcode
+         else:
+           # TODO: add .done to installed file list (etc/setup/pkg-foo.gz)
+           #print '****** saving .done file (I think)'
+           #write_filelist ([bat + '.done'])  #FIXME: overwrites existing list instead of appends
+
+           os.rename (bat, bat + '.done')
+           print >>sys.stderr, "Post_install complete, return code", retcode
+
+      except OSError, e:
+         print >>sys.stderr, "Execution failed:", e
+
 # CHANGED: pythonized gzip
 def get_filelist ():
-	os.chdir (config)
-	pipe = gzip.open (config + packagename + '.lst.gz', 'r')
-	lst = map (string.strip, pipe.readlines ())
-	if pipe.close ():
-		raise 'urg'
-	return lst
+   os.chdir (config)
+   pipe = gzip.open (config + packagename + '.lst.gz', 'r')
+   lst = map (string.strip, pipe.readlines ())
+   if pipe.close ():
+      raise 'urg'
+   return lst
 
 # CHANGED: pythonized gzip
 def write_filelist (lst):
-	os.chdir(config)
-	pipe = gzip.open (packagename + '.lst.gz','w')
+   os.chdir(config)
+   pipe = gzip.open (packagename + '.lst.gz','w')
 
-	for i in lst:
-		pipe.write (i)
-		pipe.write ('\n')
-	if pipe.close ():
-		raise 'urg'
+   for i in lst:
+      pipe.write (i)
+      pipe.write ('\n')
+   if pipe.close ():
+      raise 'urg'
 
 def do_uninstall ():
-	# find list
-	lst = get_filelist ()
-	
-	# remove files
-	for i in lst:
-		file = os.path.join (root, i)
-		if not os.path.exists (file):
-			sys.stderr.write ('warning: %s no such file\n' % file)
-		elif not os.path.isdir (file):
-			if os.remove (file):
-				raise 'urg'
+   # find list
+   lst = get_filelist ()
+   
+   # remove files
+   # FIXME: etc/postinstall/*bat.done files are missed because they are in etc/setup/%pkg%.gz as *.bat
+   for i in lst:
+      file = os.path.join (root, i)
+      if not os.path.exists (file):
+         sys.stderr.write ('warning: %s no such file\n' % file)
+      elif not os.path.isdir (file):
+         if os.remove (file):
+            raise 'urg'
 
-	# TODO: remove empty dirs?
-	# TODO: clear list?
-	write_filelist ([])
-	# update installed[]
-	del (installed[0][packagename])
-	write_installed ()
+   # TODO: remove empty dirs?
+   # TODO: clear list?
+   write_filelist ([])
+   # update installed[]
+   del (installed[0][packagename])
+   write_installed ()
 
 def remove ():
-	'''uninstall packages'''
-	global packagename
-	for packagename in files[1:]:
-		if not installed[0].has_key (packagename):
-			sys.stderr.write ('warning: %s not installed\n' % packagename)
-			continue
-		sys.stderr.write ('removing %s %s\n' \
-				  % (packagename,
-				     version_to_string (get_installed_version ())))
-		do_uninstall ()
-	
+   '''uninstall packages'''
+   global packagename
+   for packagename in files[1:]:
+      if not installed[0].has_key (packagename):
+         sys.stderr.write ('warning: %s not installed\n' % packagename)
+         continue
+      sys.stderr.write ('removing %s %s\n' \
+              % (packagename,
+                 version_to_string (get_installed_version ())))
+      do_uninstall ()
+   
 def install ():
-	'''download and install packages with dependencies'''
-	global packagename
-	missing = {}
-	for packagename in files[1:]:
-		missing.update (dict (map (lambda x: (x, 0), get_missing ())))
-	if len (missing) > 1:
-		sys.stderr.write ('to install: \n')
-		sys.stderr.write ('    %s' % string.join (missing.keys ()))
-		sys.stderr.write ('\n')
-	for packagename in missing.keys ():
-		download ()
-	if download_p:
-		sys.exit (0)
-	for packagename in missing.keys ():
-		if installed[0].has_key (packagename):
-			sys.stderr.write ('preparing to replace %s %s\n' \
-					  % (packagename,
-					     version_to_string (get_installed_version ())))
-			do_uninstall ()
-		sys.stderr.write ('installing %s %s\n' \
-				  % (packagename,
-				     version_to_string (get_version ())))
-		do_install ()
+   '''download and install packages with dependencies'''
+   global packagename
+   missing = {}
+   for packagename in files[1:]:
+      missing.update (dict (map (lambda x: (x, 0), get_missing ())))
+   if len (missing) > 1:
+      sys.stderr.write ('to install: \n')
+      sys.stderr.write ('    %s' % string.join (missing.keys ()))
+      sys.stderr.write ('\n')
+   for packagename in missing.keys ():
+      download ()
+   if download_p:
+      sys.exit (0)
+   for packagename in missing.keys ():
+      if installed[0].has_key (packagename):
+         sys.stderr.write ('preparing to replace %s %s\n' \
+                 % (packagename,
+                    version_to_string (get_installed_version ())))
+         do_uninstall ()
+      sys.stderr.write ('installing %s %s\n' \
+              % (packagename,
+                 version_to_string (get_version ())))
+      do_install ()
 
 def upgrade ():
-	'''all installed packages'''
-	files[1:] = get_new ()
-	install ()
+   '''all installed packages'''
+   files[1:] = get_new ()
+   install ()
 
 def setup ():
-	'''cygwin environment'''
-	if not os.path.isdir (root):
-		sys.stderr.write ('Root dir not found, creating %s\n' % root)
-		os.makedirs (root)
-		## mhw: if root doesn't exist create it. Old approach to just quit is below:
-		#sys.stderr.write ('error: %s no root dir\n' % root)
-		#sys.exit (2)
-	if not os.path.isdir (config):
-		sys.stderr.write ('creating %s\n' % config)
-		os.makedirs (config)
-	if not os.path.isfile (installed_db):
-		sys.stderr.write ('creating %s\n' % installed_db)
-		global installed
-		installed = {0:{}}
-		write_installed ()
-	if not os.path.isfile (setup_ini):
-		sys.stderr.write ('getting %s\n' % setup_ini)
-		update ()
+   '''cygwin environment'''
+   if not os.path.isdir (root):
+      sys.stderr.write ('Root dir not found, creating %s\n' % root)
+      os.makedirs (root)
+      ## mhw: if root doesn't exist create it. Old approach to just quit is below:
+      #sys.stderr.write ('error: %s no root dir\n' % root)
+      #sys.exit (2)
+   if not os.path.isdir (config):
+      sys.stderr.write ('creating %s\n' % config)
+      os.makedirs (config)
+   if not os.path.isfile (installed_db):
+      sys.stderr.write ('creating %s\n' % installed_db)
+      global installed
+      installed = {0:{}}
+      write_installed ()
+   if not os.path.isfile (setup_ini):
+      sys.stderr.write ('getting %s\n' % setup_ini)
+      update ()
 
 ##TODO: remove do_unpack, do_build, build, source ??
 ## osgeo4w does not provide a build environment
@@ -657,100 +662,100 @@
 
 #FIXME: pythonize gzip, tar, etc.
 def do_unpack ():
-	# find ball
-	ball = get_ball ()
-	# untar capture list
-	# tarfile
-	#pipe = os.popen ('tar -C %s -xjvf %s' % (CWD, ball), 'r')
+   # find ball
+   ball = get_ball ()
+   # untar capture list
+   # tarfile
+   #pipe = os.popen ('tar -C %s -xjvf %s' % (CWD, ball), 'r')
 
-	global packagename
-	basename = os.path.basename (ball)
-	packagename = re.sub ('(-src)*\.tar\.(bz2|gz)', '', basename)
-		    
-	if os.path.exists ('%s/%s' % (SRC, packagename)):
-		return
+   global packagename
+   basename = os.path.basename (ball)
+   packagename = re.sub ('(-src)*\.tar\.(bz2|gz)', '', basename)
+          
+   if os.path.exists ('%s/%s' % (SRC, packagename)):
+      return
 
-	pipe = os.popen ('tar -C %s -xjvf %s' % (SRC, ball), 'r')
-	lst = map (string.strip, pipe.readlines ())
-	if pipe.close ():
-		raise 'urg1'
-	print ('%s/%s' % (SRC, packagename))
-	if not os.path.exists ('%s/%s' % (SRC, packagename)):
-		raise 'urg2'
+   pipe = os.popen ('tar -C %s -xjvf %s' % (SRC, ball), 'r')
+   lst = map (string.strip, pipe.readlines ())
+   if pipe.close ():
+      raise 'urg1'
+   print ('%s/%s' % (SRC, packagename))
+   if not os.path.exists ('%s/%s' % (SRC, packagename)):
+      raise 'urg2'
 
 def do_build ():
-	src = '%s/%s' % (SRC, packagename)
-	if not os.path.exists (src):
-		raise 'urg'
+   src = '%s/%s' % (SRC, packagename)
+   if not os.path.exists (src):
+      raise 'urg'
 
-	m = re.match ('^(.*)-([0-9]*)$', packagename)
-	if not m:
-		raise 'urg'
-	namever = m.group (1)
+   m = re.match ('^(.*)-([0-9]*)$', packagename)
+   if not m:
+      raise 'urg'
+   namever = m.group (1)
 
-	package = split_ball (packagename)
-	name = package[0]
-	#namever = name + '-' + string.join (package[1][1:-1], '.')
-	pbuild = package[1][-1]
+   package = split_ball (packagename)
+   name = package[0]
+   #namever = name + '-' + string.join (package[1][1:-1], '.')
+   pbuild = package[1][-1]
 
-	# ugh: mknetrel should source <src>/cygwin/mknetrel
-	# copy to mknetrel's EXTRA dir for now
-	cygwin = src + '/cygwin'
-	script = cygwin + '/mknetrel'
-	if os.path.exists (script):
-		shutil.copy (script, '%s/%s' % (EXTRA, namever))
-		
-	os.system ('mknetrel %s' % namever)
-	
+   # ugh: mknetrel should source <src>/cygwin/mknetrel
+   # copy to mknetrel's EXTRA dir for now
+   cygwin = src + '/cygwin'
+   script = cygwin + '/mknetrel'
+   if os.path.exists (script):
+      shutil.copy (script, '%s/%s' % (EXTRA, namever))
+      
+   os.system ('mknetrel %s' % namever)
+   
 def build ():
-	'''build package from source in CWD'''
-	global packagename
-	if not packagename:
-		packagename = os.path.basename (CWD)
-	do_build ()
-	
+   '''build package from source in CWD'''
+   global packagename
+   if not packagename:
+      packagename = os.path.basename (CWD)
+   do_build ()
+   
 def source ():
-	'''download, build and install'''
-	global packagename
-	# let's not do dependencies
-	#for packagename in missing.keys ():
-	global INSTALL
-	INSTALL = 'source'
-	for packagename in files[1:]:
-		download ()
-	for packagename in files[1:]:
-		do_unpack ()
-		do_build ()
-	if 1 or download_p:
-		sys.exit (0)
+   '''download, build and install'''
+   global packagename
+   # let's not do dependencies
+   #for packagename in missing.keys ():
+   global INSTALL
+   INSTALL = 'source'
+   for packagename in files[1:]:
+      download ()
+   for packagename in files[1:]:
+      do_unpack ()
+      do_build ()
+   if 1 or download_p:
+      sys.exit (0)
 
 def find ():
-	'''package containing file'''
-	global packagename
-	regexp = re.sub ('^%s/' % root, '/', packagename)
-	hits = []
-	for packagename in psort (installed[0].keys ()):
-		for i in get_filelist ():
-			if re.search (regexp, '/%s' % i):
-				hits.append ('%s: /%s' % (packagename, i))
-	print (string.join (hits, '\n'))
+   '''package containing file'''
+   global packagename
+   regexp = re.sub ('^%s/' % root, '/', packagename)
+   hits = []
+   for packagename in psort (installed[0].keys ()):
+      for i in get_filelist ():
+         if re.search (regexp, '/%s' % i):
+            hits.append ('%s: /%s' % (packagename, i))
+   print (string.join (hits, '\n'))
 
 if command == 'setup':
-	setup ()
-	sys.exit (0)
+   setup ()
+   sys.exit (0)
 
 if command == 'update':
-	update ()
-	sys.exit (0)
+   update ()
+   sys.exit (0)
 
 for i in (installed_db, setup_ini):
-	if not os.path.isfile (i):
-		sys.stderr.write ('error: %s no such file\n' % i)
-		sys.stderr.write ('error: set OSGEO4W_ROOT and run "apt setup"\n')
-		sys.exit (2)
-	
+   if not os.path.isfile (i):
+      sys.stderr.write ('error: %s no such file\n' % i)
+      sys.stderr.write ('error: set OSGEO4W_ROOT and run "apt setup"\n')
+      sys.exit (2)
+   
 get_setup_ini ()
 get_installed ()
 
 if command and command in __main__.__dict__:
-	__main__.__dict__[command] ()
+   __main__.__dict__[command] ()



More information about the osgeo4w-commits mailing list