57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# Copyright 2020 Google LLC
|
||
|
#
|
||
|
# Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# https://llvm.org/LICENSE.txt
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
import os
|
||
|
from typing import Optional
|
||
|
import git
|
||
|
import logging
|
||
|
|
||
|
# TODO: move to config file
|
||
|
LLVM_GITHUB_URL = 'ssh://git@github.com/llvm/llvm-project'
|
||
|
_LOGGER = logging.getLogger()
|
||
|
|
||
|
|
||
|
class Phab2Github:
|
||
|
|
||
|
def __init__(self, workdir: str):
|
||
|
self.workdir = workdir
|
||
|
self.llvm_dir = os.path.join(self.workdir, 'llvm-project')
|
||
|
self.repo = None # type: Optional[git.Repo]
|
||
|
|
||
|
def sync(self):
|
||
|
_LOGGER.info('Starting sync...')
|
||
|
self._refresh_master()
|
||
|
revisions = self._get_revisions()
|
||
|
|
||
|
def _refresh_master(self):
|
||
|
if not os.path.exists(self.workdir):
|
||
|
os.mkdir(self.workdir)
|
||
|
if os.path.exists(self.llvm_dir):
|
||
|
# TODO: in case of errors: delete and clone
|
||
|
_LOGGER.info('pulling origin...')
|
||
|
self.repo = git.Repo(self.llvm_dir)
|
||
|
self.repo.remotes.origin.pull()
|
||
|
else:
|
||
|
_LOGGER.info('cloning repository...')
|
||
|
git.Repo.clone_from(LLVM_GITHUB_URL, self.llvm_dir)
|
||
|
_LOGGER.info('refresh of master branch completed')
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
rootdir = os.path.dirname(os.path.abspath(__file__))
|
||
|
tmpdir = os.path.join(rootdir, 'tmp')
|
||
|
p2g = Phab2Github(tmpdir)
|
||
|
p2g.sync()
|