Skip to content

Instantly share code, notes, and snippets.

@DanielOaks
Created December 4, 2015 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DanielOaks/e014828dc1dbaa4a894b to your computer and use it in GitHub Desktop.
Save DanielOaks/e014828dc1dbaa4a894b to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# ircd git generation from archive files
# like irc2.1.1.tar.Z
# code
import os
import shutil
import gitapi
import tarfile
from version import LooseVersion
# settings
history_files_dir = 'history_files'
git_dir = 'repo'
# files/folders
if not os.path.exists(git_dir):
os.makedirs(git_dir)
ircd_archive_files = [f for f in os.listdir(os.path.join(os.curdir, history_files_dir)) if f.startswith('irc2') and ('tgz' in f or 'tar' in f)]
# sort versions
versions = {}
for name in ircd_archive_files:
ver = name.lstrip('irc').replace('.tgz', '').replace('.tar.gz', '').replace('.tar.Z', '').replace('.tar', '')
if '+' in ver or 'patched' in ver or 'jp' in ver or 'bu' in ver:
continue
versions[ver] = os.path.join(history_files_dir, name)
# git
repo = gitapi.Repo(git_dir)
repo.git_init()
# extract
sorted_versions = sorted(versions, key=LooseVersion)
for version in sorted_versions:
filename = versions[version]
print(version, filename)
gzfile = tarfile.open(filename, 'r:*')
gzfile.extractall(git_dir)
ons_folders = [f for f in os.listdir(git_dir) if f.lower().startswith('irc')]
extracted_folder = os.path.join(git_dir, ons_folders[0])
extracted_file_list = os.listdir(extracted_folder)
last_modified_time = 0
for filename in extracted_file_list:
original_filename = os.path.join(extracted_folder, filename)
# only get time if it's a real file, not a symlink
if os.path.isfile(original_filename):
modified_time = float(os.path.getmtime(original_filename))
if modified_time > last_modified_time:
last_modified_time = modified_time
new_filename = os.path.join(git_dir, filename)
shutil.move(original_filename, new_filename)
repo.git_add(filename)
shutil.rmtree(extracted_folder)
repo.git_command('config', 'user.name', 'Jarkko Oikarinen')
repo.git_command('config', 'user.email', 'jto@tolsun.oulu.fi')
repo.git_commit('irc{}'.format(version),
user='Jarkko Oikarinen <jto@tolsun.oulu.fi>',
commiter=['Jarkko Oikarinen', 'jto@tolsun.oulu.fi'],
datetime=str(last_modified_time))
if version != sorted_versions[-1]:
for filename in extracted_file_list:
new_filename = os.path.join(git_dir, filename)
if os.path.isdir(new_filename):
shutil.rmtree(new_filename)
else:
os.remove(new_filename)
print('Extracted and committed irc{}'.format(version))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment