Re: [PATCH] output dir option

Dennis Gregorovic <[email protected]>
Newsgroups gmane.linux.rpm.metadata
Message-ID <[email protected]>
On Mon, 2006-01-30 at 20:49 -0500, Paul Nasrat wrote:
> On Mon, 2006-01-30 at 20:25 -0500, Dennis Gregorovic wrote:
> > The attached patch creates a new configuration option "outputdir" which
> > specifies the directory where the "repodata" dir will be created.  By
> > default, the outputdir is the same as the basedir.  
> 
> > Thoughts?
> 
> I don't know about Seth, but I certainly prefer patches with diff -u,
> could you resend and then I'll try and comment.
> 
> Paul

diff -u patch attached.

-- Dennis

_______________________________________________
Rpm-metadata mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/rpm-metadata
outputdir.patch (text/x-patch, 11.1 KB)
Index: dumpMetadata.py
===================================================================
RCS file: /cvsroot/metadata/cvs-root/generate/dumpMetadata.py,v
retrieving revision 1.35
diff -u -w -r1.35 dumpMetadata.py
--- dumpMetadata.py	13 Jan 2006 06:24:50 -0000	1.35
+++ dumpMetadata.py	31 Jan 2006 14:35:50 -0000
@@ -741,11 +741,11 @@
     
     
     for (file, ftype) in workfiles:
-        zfo = _gzipOpen(os.path.join(cmds['basedir'], cmds['tempdir'], file))
+        zfo = _gzipOpen(os.path.join(cmds['outputdir'], cmds['tempdir'], file))
         uncsum = getChecksum(sumtype, zfo)
         zfo.close()
-        csum = getChecksum(sumtype, os.path.join(cmds['basedir'], cmds['tempdir'], file))
-        timestamp = os.stat(os.path.join(cmds['basedir'], cmds['tempdir'], file))[8]
+        csum = getChecksum(sumtype, os.path.join(cmds['outputdir'], cmds['tempdir'], file))
+        timestamp = os.stat(os.path.join(cmds['outputdir'], cmds['tempdir'], file))[8]
         data = node.newChild(None, 'data', None)
         data.newProp('type', ftype)
         location = data.newChild(None, 'location', None)
@@ -764,7 +764,7 @@
         timestamp = os.stat(grpfile)[8]
         sfile = os.path.basename(grpfile)
         fo = open(grpfile, 'r')
-        output = open(os.path.join(cmds['basedir'], cmds['tempdir'], sfile), 'w')
+        output = open(os.path.join(cmds['outputdir'], cmds['tempdir'], sfile), 'w')
         output.write(fo.read())
         output.close()
         fo.seek(0)
Index: genpkgmetadata.py
===================================================================
RCS file: /cvsroot/metadata/cvs-root/generate/genpkgmetadata.py,v
retrieving revision 1.48
diff -u -w -r1.48 genpkgmetadata.py
--- genpkgmetadata.py	13 Jan 2006 06:24:50 -0000	1.48
+++ genpkgmetadata.py	31 Jan 2006 14:35:50 -0000
@@ -129,7 +129,7 @@
         basens = self.baseroot.newNs('http://linux.duke.edu/metadata/common', None)
         self.formatns = self.baseroot.newNs('http://linux.duke.edu/metadata/rpm', 'rpm')
         self.baseroot.setNs(basens)
-        basefilepath = os.path.join(self.cmds['basedir'], self.cmds['tempdir'], self.cmds['primaryfile'])
+        basefilepath = os.path.join(self.cmds['outputdir'], self.cmds['tempdir'], self.cmds['primaryfile'])
         self.basefile = _gzipOpen(basefilepath, 'w')
         self.basefile.write('<?xml version="1.0" encoding="UTF-8"?>\n')
         self.basefile.write('<metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="%s">\n' %
@@ -141,7 +141,7 @@
         self.filesroot = self.filesdoc.newChild(None, "filelists", None)
         filesns = self.filesroot.newNs('http://linux.duke.edu/metadata/filelists', None)
         self.filesroot.setNs(filesns)
-        filelistpath = os.path.join(self.cmds['basedir'], self.cmds['tempdir'], self.cmds['filelistsfile'])
+        filelistpath = os.path.join(self.cmds['outputdir'], self.cmds['tempdir'], self.cmds['filelistsfile'])
         self.flfile = _gzipOpen(filelistpath, 'w')
         self.flfile.write('<?xml version="1.0" encoding="UTF-8"?>\n')
         self.flfile.write('<filelists xmlns="http://linux.duke.edu/metadata/filelists" packages="%s">\n' %
@@ -153,7 +153,7 @@
         self.otherroot = self.otherdoc.newChild(None, "otherdata", None)
         otherns = self.otherroot.newNs('http://linux.duke.edu/metadata/other', None)
         self.otherroot.setNs(otherns)
-        otherfilepath = os.path.join(self.cmds['basedir'], self.cmds['tempdir'], self.cmds['otherfile'])
+        otherfilepath = os.path.join(self.cmds['outputdir'], self.cmds['tempdir'], self.cmds['otherfile'])
         self.otherfile = _gzipOpen(otherfilepath, 'w')
         self.otherfile.write('<?xml version="1.0" encoding="UTF-8"?>\n')
         self.otherfile.write('<otherdata xmlns="http://linux.duke.edu/metadata/other" packages="%s">\n' %
@@ -245,7 +245,7 @@
         reporoot = repodoc.newChild(None, "repomd", None)
         repons = reporoot.newNs('http://linux.duke.edu/metadata/repo', None)
         reporoot.setNs(repons)
-        repofilepath = os.path.join(self.cmds['basedir'], self.cmds['tempdir'], self.cmds['repomdfile'])
+        repofilepath = os.path.join(self.cmds['outputdir'], self.cmds['tempdir'], self.cmds['repomdfile'])
 
         try:
             dumpMetadata.repoXML(reporoot, self.cmds)
@@ -344,6 +344,7 @@
     cmds['basedir'] = os.getcwd()
     cmds['cache'] = False
     cmds['split'] = False
+    cmds['outputdir'] = ""
     cmds['file-pattern-match'] = ['.*bin\/.*', '^\/etc\/.*', '^\/usr\/lib\/sendmail$']
     cmds['dir-pattern-match'] = ['.*bin\/.*', '^\/etc\/.*']
 
@@ -351,7 +352,7 @@
         gopts, argsleft = getopt.getopt(args, 'phqVvg:s:x:u:c:', ['help', 'exclude=',
                                                                   'quiet', 'verbose', 'cachedir=', 'basedir=',
                                                                   'baseurl=', 'groupfile=', 'checksum=',
-                                                                  'version', 'pretty', 'split'])
+                                                                  'version', 'pretty', 'split', 'outputdir='])
     except getopt.error, e:
         errorprint(_('Options Error: %s.') % e)
         usage()
@@ -411,24 +412,13 @@
                 cmds['cachedir'] = a
             elif arg == '--basedir':
                 cmds['basedir'] = a
+            elif arg == '--outputdir':
+                cmds['outputdir'] = a
                     
     except ValueError, e:
         errorprint(_('Options Error: %s') % e)
         usage()
 
-    #setup some defaults
-    cmds['primaryfile'] = 'primary.xml.gz'
-    cmds['filelistsfile'] = 'filelists.xml.gz'
-    cmds['otherfile'] = 'other.xml.gz'
-    cmds['repomdfile'] = 'repomd.xml'
-    cmds['tempdir'] = '.repodata'
-    cmds['finaldir'] = 'repodata'
-    cmds['olddir'] = '.olddata'
-
-    return cmds, directories
-
-def main(args):
-    cmds, directories = parseArgs(args)
     directory = directories[0]
 # Fix paths
     directory = os.path.normpath(directory)
@@ -440,6 +430,9 @@
     else:
         cmds['basedir'] = os.path.realpath(os.path.join(cmds['basedir'], directory))
         directory = '.'
+    directories[0] = directory
+    if not cmds['outputdir']:
+        cmds['outputdir'] = cmds['basedir']
     if cmds['groupfile']:
         a = cmds['groupfile']
         if cmds['split']:
@@ -459,6 +452,23 @@
             usage()
         cmds['cachedir'] = a
 
+    #setup some defaults
+    cmds['primaryfile'] = 'primary.xml.gz'
+    cmds['filelistsfile'] = 'filelists.xml.gz'
+    cmds['otherfile'] = 'other.xml.gz'
+    cmds['repomdfile'] = 'repomd.xml'
+    cmds['tempdir'] = '.repodata'
+    cmds['finaldir'] = 'repodata'
+    cmds['olddir'] = '.olddata'
+
+    return cmds, directories
+
+def main(args):
+    cmds, directories = parseArgs(args)
+    print cmds
+    print directories
+    directory = directories[0]
+
     # start the sanity/stupidity checks
     if not os.path.exists(os.path.join(cmds['basedir'], directory)):
         errorprint(_('Directory must exist'))
@@ -468,27 +478,27 @@
         errorprint(_('Directory of packages must be a directory.'))
         sys.exit(1)
 
-    if not os.access(cmds['basedir'], os.W_OK):
+    if not os.access(cmds['outputdir'], os.W_OK):
         errorprint(_('Directory must be writable.'))
         sys.exit(1)
 
     if cmds['split']:
         oldbase = cmds['basedir']
         cmds['basedir'] = os.path.join(cmds['basedir'], directory)
-    if not checkAndMakeDir(os.path.join(cmds['basedir'], cmds['tempdir'])):
+    if not checkAndMakeDir(os.path.join(cmds['outputdir'], cmds['tempdir'])):
         sys.exit(1)
 
-    if not checkAndMakeDir(os.path.join(cmds['basedir'], cmds['finaldir'])):
+    if not checkAndMakeDir(os.path.join(cmds['outputdir'], cmds['finaldir'])):
         sys.exit(1)
 
-    if os.path.exists(os.path.join(cmds['basedir'], cmds['olddir'])):
+    if os.path.exists(os.path.join(cmds['outputdir'], cmds['olddir'])):
         errorprint(_('Old data directory exists, please remove: %s') % cmds['olddir'])
         sys.exit(1)
 
     # make sure we can write to where we want to write to:
     for direc in ['tempdir', 'finaldir']:
         for file in ['primaryfile', 'filelistsfile', 'otherfile', 'repomdfile']:
-            filepath = os.path.join(cmds['basedir'], cmds[direc], cmds[file])
+            filepath = os.path.join(cmds['outputdir'], cmds[direc], cmds[file])
             if os.path.exists(filepath):
                 if not os.access(filepath, os.W_OK):
                     errorprint(_('error in must be able to write to metadata files:\n  -> %s') % filepath)
@@ -503,23 +513,23 @@
         mdgen.doPkgMetadata(directory)
     mdgen.doRepoMetadata()
 
-    if os.path.exists(os.path.join(cmds['basedir'], cmds['finaldir'])):
+    if os.path.exists(os.path.join(cmds['outputdir'], cmds['finaldir'])):
         try:
-            os.rename(os.path.join(cmds['basedir'], cmds['finaldir']),
-                      os.path.join(cmds['basedir'], cmds['olddir']))
+            os.rename(os.path.join(cmds['outputdir'], cmds['finaldir']),
+                      os.path.join(cmds['outputdir'], cmds['olddir']))
         except:
-            errorprint(_('Error moving final %s to old dir %s' % (os.path.join(cmds['basedir'], cmds['finaldir']),
-                                                                  os.path.join(cmds['basedir'], cmds['olddir']))))
+            errorprint(_('Error moving final %s to old dir %s' % (os.path.join(cmds['outputdir'], cmds['finaldir']),
+                                                                  os.path.join(cmds['outputdir'], cmds['olddir']))))
             sys.exit(1)
 
     try:
-        os.rename(os.path.join(cmds['basedir'], cmds['tempdir']),
-                  os.path.join(cmds['basedir'], cmds['finaldir']))
+        os.rename(os.path.join(cmds['outputdir'], cmds['tempdir']),
+                  os.path.join(cmds['outputdir'], cmds['finaldir']))
     except:
         errorprint(_('Error moving final metadata into place'))
         # put the old stuff back
-        os.rename(os.path.join(cmds['basedir'], cmds['olddir']),
-                  os.path.join(cmds['basedir'], cmds['finaldir']))
+        os.rename(os.path.join(cmds['outputdir'], cmds['olddir']),
+                  os.path.join(cmds['outputdir'], cmds['finaldir']))
         sys.exit(1)
 
     for file in ['primaryfile', 'filelistsfile', 'otherfile', 'repomdfile', 'groupfile']:
@@ -527,7 +537,7 @@
             fn = os.path.basename(cmds[file])
         else:
             continue
-        oldfile = os.path.join(cmds['basedir'], cmds['olddir'], fn)
+        oldfile = os.path.join(cmds['outputdir'], cmds['olddir'], fn)
         if os.path.exists(oldfile):
             try:
                 os.remove(oldfile)
@@ -536,9 +546,9 @@
                 errorprint(_('Error was %s') % e)
                 sys.exit(1)
 
-#XXX: fix to remove tree as we mung basedir
+#XXX: fix to remove tree as we mung outputdir
     try:
-        os.rmdir(os.path.join(cmds['basedir'], cmds['olddir']))
+        os.rmdir(os.path.join(cmds['outputdir'], cmds['olddir']))
     except OSError, e:
         errorprint(_('Could not remove old metadata dir: %s') % cmds['olddir'])
         errorprint(_('Error was %s') % e)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.