[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