#!/usr/bin/python
# $id: $

import sys, os, posixpath
from glob import glob
import commands
import ipkg
import getopt

verbose = 0

def usage():
     sys.stderr.write("%s [-h] [-s] [-l Packages.filelist] [-p Packages] [-v] packagesdir\n" % (sys.argv[0],)) 
     sys.exit(-1)

packages_filename = None
filelist_filename = "Packages.filelist"
opt_s = 0
(opts, remaining_args) = getopt.getopt(sys.argv[1:], "hl:p:vs")
for (optkey, optval) in opts:
     if optkey == '-h': 
          usage()
     if optkey == '-s': 
          opt_s = 1
     if optkey == '-p': 
          packages_filename = optval
     if optkey == '-l':
          filelist_filename = optval
     if optkey == '-v':
          verbose = 1

pkg_dir=remaining_args[0]

if ( not pkg_dir ):
     sys.stderr.write("Usage: ipkg-make-index <package_directory>\n")
     sys.exit(1)

packages = ipkg.Packages()

if (verbose):
     sys.stderr.write("Reading in all the package info from %s\n" % (pkg_dir, ))
files=glob(pkg_dir + '/*.ipk')
files.sort()
for filename in files:
     if (verbose):
          sys.stderr.write("Reading info for package %s\n" % (filename,))
     pkg = ipkg.Package(filename)
     s = packages.add_package(pkg)
     if s != 0 and opt_s:
	  print filename

if opt_s:
     sys.exit(0)

if verbose:
     sys.stderr.write("Generating Packages file\n")
if packages_filename:
     old_stdout = sys.stdout
     tmp_packages_filename = ("%s.%d" % (packages_filename, os.getpid()))
     sys.stdout = open(tmp_packages_filename, "w")
names = packages.packages.keys()
names.sort()
for name in names:
     pkg = packages.packages[name]
     if (verbose):
          sys.stderr.write("Writing info for package %s\n" % (pkg.package,))
     print pkg
if packages_filename:
     sys.stdout.close()
     os.rename(tmp_packages_filename, packages_filename) 
     sys.stdout = old_stdout

if verbose:	
     sys.stderr.write("Generate Packages.filelist file\n")
files = {}
names = packages.packages.keys()
names.sort()
for name in names:
     for fn in packages[name].get_file_list():
          (h,t) = os.path.split(fn)
          if not t: continue
          if not files.has_key(t): files[t] = name+':'+fn
          else: files[t] = files[t] + ',' + name+':'+fn

if filelist_filename:
     tmp_filelist_filename = ("%s.%d" % (filelist_filename, os.getpid()))
     sys.stdout = open(tmp_filelist_filename, "w")
     names = files.keys()
     names.sort()
     for name in names:
          print name,files[name]
     sys.stdout.close()
     if posixpath.exists(filelist_filename):
          os.unlink(filelist_filename)
     os.rename(tmp_filelist_filename, filelist_filename)
