Merging upstream version 2.13.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
c2d1f037e4
commit
1e2278d3de
27 changed files with 1249 additions and 80 deletions
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import gzip
|
||||
import os.path
|
||||
import shutil
|
||||
import subprocess
|
||||
|
@ -14,25 +15,24 @@ from typing import Sequence
|
|||
|
||||
|
||||
REPOS = (
|
||||
('rbenv', 'git://github.com/rbenv/rbenv', '0843745'),
|
||||
('ruby-build', 'git://github.com/rbenv/ruby-build', '500863c'),
|
||||
('rbenv', 'https://github.com/rbenv/rbenv', '585ed84'),
|
||||
('ruby-build', 'https://github.com/rbenv/ruby-build', 'e9fa4bf'),
|
||||
(
|
||||
'ruby-download',
|
||||
'git://github.com/garnieretienne/rvm-download',
|
||||
'https://github.com/garnieretienne/rvm-download',
|
||||
'09bd7c6',
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def make_archive(name: str, repo: str, ref: str, destdir: str) -> str:
|
||||
"""Makes an archive of a repository in the given destdir.
|
||||
def reset(tarinfo: tarfile.TarInfo) -> tarfile.TarInfo:
|
||||
tarinfo.uid = tarinfo.gid = 0
|
||||
tarinfo.uname = tarinfo.gname = 'root'
|
||||
tarinfo.mtime = 0
|
||||
return tarinfo
|
||||
|
||||
:param text name: Name to give the archive. For instance foo. The file
|
||||
that is created will be called foo.tar.gz.
|
||||
:param text repo: Repository to clone.
|
||||
:param text ref: Tag/SHA/branch to check out.
|
||||
:param text destdir: Directory to place archives in.
|
||||
"""
|
||||
|
||||
def make_archive(name: str, repo: str, ref: str, destdir: str) -> str:
|
||||
output_path = os.path.join(destdir, f'{name}.tar.gz')
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
# this ensures that the root directory has umask permissions
|
||||
|
@ -47,8 +47,24 @@ def make_archive(name: str, repo: str, ref: str, destdir: str) -> str:
|
|||
# runtime
|
||||
shutil.rmtree(os.path.join(gitdir, '.git'))
|
||||
|
||||
with tarfile.open(output_path, 'w|gz') as tf:
|
||||
tf.add(gitdir, name)
|
||||
arcs = [(name, gitdir)]
|
||||
for root, dirs, filenames in os.walk(gitdir):
|
||||
for filename in dirs + filenames:
|
||||
abspath = os.path.abspath(os.path.join(root, filename))
|
||||
relpath = os.path.relpath(abspath, gitdir)
|
||||
arcs.append((os.path.join(name, relpath), abspath))
|
||||
arcs.sort()
|
||||
|
||||
with gzip.GzipFile(output_path, 'wb', mtime=0) as gzipf:
|
||||
# https://github.com/python/typeshed/issues/5491
|
||||
with tarfile.open(fileobj=gzipf, mode='w') as tf: # type: ignore
|
||||
for arcname, abspath in arcs:
|
||||
tf.add(
|
||||
abspath,
|
||||
arcname=arcname,
|
||||
recursive=False,
|
||||
filter=reset,
|
||||
)
|
||||
|
||||
return output_path
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue