[projects/git-slug: 105/170] Working version of git-archive

glen glen at pld-linux.org
Mon Sep 21 21:47:38 CEST 2015


commit cd042d3e89d93fdd0f689058be221ecbcabedca0
Author: Kacper Kornet <draenog at pld-linux.org>
Date:   Sat Mar 24 03:08:39 2012 +0000

    Working version of git-archive
    
    It is not possible to use tar.next() because it is not to use directly
    tar.extractfile(REFFILE) on streamed tar archive. See:
    http://bugs.python.org/issue10436

 git_slug/refsdata.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
---
diff --git a/git_slug/refsdata.py b/git_slug/refsdata.py
index 97ce448..d51fad7 100644
--- a/git_slug/refsdata.py
+++ b/git_slug/refsdata.py
@@ -3,6 +3,7 @@ import collections
 import fnmatch
 import os
 import re
+import tarfile
 from .gitconst import EMPTYSHA1, REFFILE, REFREPO, GITSERVER
 from .gitrepo import GitRepo
 
@@ -44,3 +45,18 @@ class GitRemoteRefsData(RemoteRefsData):
         RemoteRefsData.__init__(self, showfile.stdout, pattern, dirpattern)
         if showfile.wait():
             raise RemoteRefsError(REFFILE, path)
+
+class GitArchiveRefsData(RemoteRefsData):
+    def __init__(self, path, pattern, dirpattern=('*')):
+        fullrefrepo = 'git://{}/{}'.format(GITSERVER, REFREPO)
+        archcmd = GitRepo(None, None).command(['archive', '--format=tgz', '--remote={}'.format(fullrefrepo), 'HEAD'])
+        try:
+            tar = tarfile.open(fileobj=archcmd.stdout, mode='r|*')
+        except tarfile.TarError:
+            raise RemoteRefsError(REFFILE, fullrefrepo)
+        member = tar.next()
+        if member.name != REFFILE:
+            raise RemoteRefsError(REFFILE, fullrefrepo)
+        RemoteRefsData.__init__(self, tar.extractfile(member), pattern, dirpattern)
+        if archcmd.wait():
+            raise RemoteRefsError(REFFILE, fullrefrepo)
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/projects/git-slug.git/commitdiff/4ed64f73960519a2f4fd04c42950b2c96ae795c5



More information about the pld-cvs-commit mailing list