Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial attempt at #42 #44

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
DEFAULT_CLONE_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'repos')
DEFAULT_AUTHOR = 'Apertium Bot <[email protected]>'
DEFAULT_SYNC_INTERVAL = 3 # seconds
DEFAULT_SYNC_DEPTH = 1

server = None

Expand Down Expand Up @@ -154,21 +155,22 @@ def repos_for_topics(repos_by_topic, topics):


class MetaRepoSyncer:
def __init__(self, clone_dir, name, submodules, author):
def __init__(self, clone_dir, name, submodules, author, depth):
self.clone_dir = clone_dir
self.name = name
self.submodules = submodules
self.author = author
self.depth = depth

self.dir = os.path.join(clone_dir, name)
self.check_call = functools.partial(subprocess.check_call, cwd=self.dir)

def clone(self, init_submodules=True):
if not os.path.isdir(os.path.join(self.clone_dir, self.name)):
logging.info('Cloning meta repository %s', self.name)
subprocess.check_call(shlex.split('git clone --depth 1 [email protected]:{}/{}.git'.format(ORGANIZATION, self.name)), cwd=self.clone_dir)
subprocess.check_call(shlex.split('git clone --depth {} [email protected]:{}/{}.git'.format(self.depth, ORGANIZATION, self.name)), cwd=self.clone_dir)
if init_submodules and self._has_submodules():
self.check_call(shlex.split('git submodule update --depth 1 --init --jobs 8'))
self.check_call(shlex.split('git submodule update --depth {} --init --jobs 8'.format(self.depth)))
else:
logging.debug('Meta repository %s already cloned', self.name)

Expand Down Expand Up @@ -335,7 +337,7 @@ def handle_events(self):
with concurrent.futures.ThreadPoolExecutor() as pool:
for name, topics in metarepo_group.items():
submodules = repos_for_topics(repos_by_topic, topics)
pool.submit(MetaRepoSyncer(self.args.dir, name, submodules, self.args.author).sync)
pool.submit(MetaRepoSyncer(self.args.dir, name, submodules, self.args.author, self.args.sync_depth).sync)
else:
logging.debug('Ignoring events for meta repository group %d', i)
except Exception as error:
Expand Down Expand Up @@ -374,6 +376,7 @@ def main():
parser.add_argument('--port', '-p', type=int, help='server port (default: {})'.format(DEFAULT_PORT), default=DEFAULT_PORT)
parser.add_argument('--token', '-t', help='GitHub OAuth token', required=(DEFAULT_OAUTH_TOKEN is None), default=DEFAULT_OAUTH_TOKEN)
parser.add_argument('--sync-interval', '-i', help='min interval between syncs (default: {}s)'.format(DEFAULT_SYNC_INTERVAL), default=DEFAULT_SYNC_INTERVAL)
parser.add_argument('--sync-depth', '-n', help='clone depth for syncing (default: {})'.format(DEFAULT_SYNC_DEPTH), default=DEFAULT_SYNC_DEPTH)
parser.add_argument('--author', '-a', help='commit author (default: {})'.format(DEFAULT_AUTHOR), default=DEFAULT_AUTHOR)
args = parser.parse_args()

Expand All @@ -393,12 +396,12 @@ def main():
if args.repo:
topics = collections.ChainMap(*METAREPOS)[args.repo]
submodules = repos_for_topics(repos_by_topic, topics)
MetaRepoSyncer(args.dir, args.repo, submodules, args.author).sync()
MetaRepoSyncer(args.dir, args.repo, submodules, args.author, args.sync_depth).sync()
else:
for metarepo_group in METAREPOS:
for name, topics in metarepo_group.items():
submodules = repos_for_topics(repos_by_topic, topics)
MetaRepoSyncer(args.dir, name, submodules, args.author).sync()
MetaRepoSyncer(args.dir, name, submodules, args.author, args.sync_depth).sync()


if __name__ == '__main__':
Expand Down