Ok, here's my revised patch.

On Jan 3, 2008 4:58 AM, Guido Guenther <[EMAIL PROTECTED]> wrote:
> Hi Andres,
> On Mon, Dec 31, 2007 at 03:24:17AM -0500, Andres Mejia wrote:
> > Please allow an option to omit importing the upstream files from a
> > package and track just the debian directory. I've attached a patch
> > that provides git-import-dsc with an 'omit-upstream' option that does
> > this.
> Thanks a lot for your patch! Making it possible to import the debian/
> dir only is a good idea but then we should name it as such:
> --debian-dir-only, this makes clear that modifications to directories
> outside debian/ will get lost (many debian diff.gzs patch files outside
> of debian/). We should also warn the user in this case, that not all of
> the diff.gz got imported.

I've done the proper modification for the option and added an info message.

> There are other issues like ending up in different directories wether an
> exception was raised or not (import_without_upstream) and you can merge
> ApplyDebianDiff and get rid of copy_file completely if you use a pipe.
> Furthermore the docs (especially the manpages) would need some care too
> and we should possible merge the git-init, git-add .,  git-commit -a
> into a function since this appears in several places.
> Would you give the patch another whirl? Otherwise I'll do as soon as I
> find the time.
> Thanks again,
>  -- Guido

I'm not sure what you mean with the directories. I thought it would go
back to the top level directory with "os.chdir(dirs['top'])" executed
after the import-* methods.

I took out the Gunzip and Copy methods. git-import-dsc will now use a
temporary file to store the contents of the patch and that file will
be used with ApplyDebianDiff. I wanted to do something where it would
read the contents of the diff.gz from stdin but it seems that the '|'
character gets ignored for some reason.

I've also patched the appropriate documentation.

-- 
Regards,
Andres Mejia
--- git-import-dsc.bak	2007-12-31 03:09:23.000000000 -0500
+++ git-import-dsc	2008-01-04 01:43:24.000000000 -0500
@@ -21,6 +21,7 @@
 import re
 import os
 import tempfile
+import random
 import glob
 import gbp.command_wrappers as gbpc
 from gbp.deb_utils import debian_version_chars
@@ -115,6 +116,43 @@
     return True
 
 
+def import_without_upstream(src, dirs):
+    """
+    Create a git repository that will hold just the debian patch
+    """
+    # Warn users about the potential for files outside of debian/ being
+    # included in diff.gz until something gets written in git-import-dsc
+    # to take care of this.
+    print "Importing debian directory only."
+    print "Be sure to check for directories/files that may have ended up"
+    print "being included in the diff.gz patch and remove them manually."
+    print "Don't forget about hidden directories/files as well."
+    diffgz = "%s_%s-%s.diff.gz" % (src.pkg, src.upstream_version, src.debian_version)
+    diffgz_path = os.path.abspath(diffgz)
+    os.chdir(dirs['tmp'])
+    try:
+        package = "%s-%s" % (src.pkg, src.upstream_version)
+        os.mkdir(package)
+        dirs['git'] = os.path.abspath(package)
+        # Write a temporary file to use as .diff patch and then apply it
+        tempdiff = "tmp"+str(random.randrange(10000000,99999999))+".diff"
+        output = os.popen('gunzip -c ' + diffgz_path, 'r')
+        TEMPFILE = open(tempdiff, "w")
+        TEMPFILE.write(output.read())
+        TEMPFILE.close()
+        gbpc.ApplyDebianDiff(tempdiff)()
+        os.chdir(dirs['git'])
+        gbpc.GitInitDB()()
+        gbpc.GitAdd()(['.'])
+        gbpc.GitCommitAll()(
+             msg="Imported debian directory only for %s version %s-%s" % (src.pkg, src.upstream_version, src.debian_version))
+    except gbpc.CommandExecFailed:
+        print >>sys.stderr, "Creation of git repository failed"
+        gbpc.RemoveTree(dirs['tmp'])
+        return False
+    return True
+
+
 def apply_debian_patch(src, dirs, options, tagger, filter):
     """apply the debian patch and tag appropriately"""
     try:
@@ -189,6 +227,8 @@
                       help="Format string for upstream tags, default is '%(upstream-tag)s'")
     parser.add_config_file_option(option_name="filter", dest="filter",
                       help="files to filter out during import")
+    parser.add_config_file_option(option_name="debian-dir-only", dest="debian_dir_only",
+                      help="import only the debian directory of a package", action="store_true")
     (options, args) = parser.parse_args(argv[1:])
 
     if options.verbose:
@@ -206,10 +246,14 @@
                 raise GbpError
 
             dirs['tmp'] = os.path.abspath(tempfile.mkdtemp(dir='.'))
-            if not import_initial(src, dirs, options, gitTag, options.filter):
-                raise GbpError
+            if options.debian_dir_only:
+                if not import_without_upstream(src, dirs):
+                    raise GbpError
+            else:
+                if not import_initial(src, dirs, options, gitTag, options.filter):
+                     raise GbpError
             os.chdir(dirs['top'])
-            if not src.native:
+            if not src.native and not options.debian_dir_only:
                 dirs['unpack'] = os.path.join(dirs['tmp'], 'unpack')
                 os.mkdir(dirs['unpack'])
                 dirs['dpkg-src'] = os.path.join(dirs['unpack'],
--- gbp/command_wrappers.py.bak 2007-12-31 03:09:28.000000000 -0500
+++ gbp/command_wrappers.py     2008-01-04 01:43:14.000000000 -0500
@@ -113,6 +113,14 @@
         self.run_error = "Couldn't extract %s" % dsc
         Command.__call__(self, [dsc, output_dir])

+class ApplyDebianDiff(Command):
+    """
+    Applies the Debian diff that's included in a non-native package
+    """
+    def __init__(self, diff):
+        self.diff = diff
+        Command.__init__(self, 'patch', [ '-p0', '-f', '-s', '-t', '-i', diff ])
+        self.run_error = "Couldn't apply Debian diff"

 class GitCommand(Command):
     "Mother/Father of all git commands"
--- gbp/config.py.bak   2007-12-31 03:09:32.000000000 -0500
+++ gbp/config.py       2008-01-04 01:43:07.000000000 -0500
@@ -38,6 +38,7 @@
                  'git-log'         : '--no-merges',
                  'export-dir'      : '',
                  'tarball-dir'     : '',
+                 'debian-dir-only' : '',      # empty means False
              }
     config_files = [ '/etc/git-buildpackage/gbp.conf',
                      os.path.expanduser('~/.gbp.conf'),
--- docs/manpages/git-import-dsc.sgml.bak       2008-01-04 01:46:04.000000000 -0500
+++ docs/manpages/git-import-dsc.sgml   2008-01-04 01:49:24.000000000 -0500
@@ -29,6 +29,7 @@
       <arg><option>--debian-tag=</option><replaceable>tag-format</replaceable></arg>
       <arg><option>--upstream-tag=</option><replaceable>tag-format</replaceable></arg>
       <arg><option>--filter=</option><replaceable>pattern</replaceable></arg>
+      <arg><option>--debian-dir-only</option></arg>
       <arg choice="plain"><replaceable>debian-source.dsc</replaceable></arg>
     </cmdsynopsis>
   </refsynopsisdiv>
@@ -103,6 +104,12 @@
           <para>filter out these files during import</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><option>--debian-dir-only</option></term>
+        <listitem>
+          <para>import only the debian directory of a package</para>
+        </listitem>
+      </varlistentry>
      </variablelist>
   </refsect1>
   <refsect1>

Reply via email to