Source: git-buildpackage
Severity: wishlist
Tags: patch

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.

-- 
Regards,
Andres Mejia
--- git-import-dsc.bak  2007-12-31 03:09:23.000000000 -0500
+++ git-import-dsc      2007-12-31 03:10:01.000000000 -0500
@@ -115,6 +115,33 @@
     return True
 
 
+def import_without_upstream(src, dirs):
+    """
+    Create a git repository that will hold just the debian patch
+    """
+    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)
+        gbpc.CopyFile(diffgz_path, '.')()
+        gbpc.GunzipDiffGz(diffgz)()
+        diff = "%s_%s-%s.diff" % (src.pkg, src.upstream_version, 
src.debian_version)
+        gbpc.ApplyDebianDiff(diff)()
+        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 +216,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="omit-upstream", 
dest="omit_upstream",
+                      help="omit importing files from upstream", 
action="store_true")
     (options, args) = parser.parse_args(argv[1:])
 
     if options.verbose:
@@ -206,10 +235,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.omit_upstream:
+                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.omit_upstream:
                 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     2007-12-31 03:10:50.000000000 -0500
@@ -113,6 +113,33 @@
         self.run_error = "Couldn't extract %s" % dsc
         Command.__call__(self, [dsc, output_dir])

+class GunzipDiffGz(Command):
+    """
+    Extract diff.gz to get patch file
+    """
+    def __init__(self, file):
+        self.file = file
+        Command.__init__(self, 'gunzip', [ file ])
+        self.run_error = "Couldn't extract %s" % file
+
+class CopyFile(Command):
+    """
+    Copy a file
+    """
+    def __init__(self, file, dest):
+        self.file = file
+        self.dest = dest
+        Command.__init__(self, 'cp', [ file, dest ])
+        self.run_error = "Couldn't copy %s to %s" % (file, dest)
+
+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 %s" % 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       2007-12-31 03:10:10.000000000 -0500
@@ -38,6 +38,7 @@
                  'git-log'         : '--no-merges',
                  'export-dir'      : '',
                  'tarball-dir'     : '',
+                 'omit-upstream'   : '',      # empty means False
              }
     config_files = [ '/etc/git-buildpackage/gbp.conf',
                      os.path.expanduser('~/.gbp.conf'),

Reply via email to