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

Add tools to synchronize with dmlc/tvm #17

Merged
merged 2 commits into from
Mar 19, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
1 change: 1 addition & 0 deletions dmlc_tvm_commit_id
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
5e3ceaa073f8540eec0e1334a9190041b88921c4
73 changes: 73 additions & 0 deletions neo-tools/sync-with-dmlc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import argparse
import logging

# Install via: pip install GitPython
from git import Repo

logging.basicConfig(level=logging.INFO)

def parse_args():
parser = argparse.ArgumentParser(description='Pull latest commits from dmlc/tvm')
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how about add --dmlc_commit_id as a parameter? we can store dmlc_tvm_commit_id in a wiki or in an issue

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We better version control this commit id in the repo since so in the future we can fully automate the workflow. Imagine in the future, a robot just needs to clone the repo and run the script.

parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')

return parser.parse_args()

def add_remote(repo, name, url):
for remote in repo.remotes:
if remote.name == name:
assert remote.url == url
logging.info("Remote {} already exists".format(name))
return
logging.info("Add remote {} with url {}".format(name, url))
repo.create_remote(name, url)

"""
This tool automatically cherry picks commit from dmlc/tvm into neo-ai/tvm's dev
branch, it keeps track of last selected commit id in file dmlc_tvm_commit_id. It
fetches from dmlc/tvm first, get the latest commit id from master branch, and cherry-picks
commits from last slected commit until latest commit.
"""
def main():
args = parse_args()
last_commit_file = 'dmlc_tvm_commit_id'
last_commit = None
with open(last_commit_file) as f:
last_commit = f.read().strip()
if last_commit is None:
logging.error('can not find last commit file {}'.format(last_commit_file))
logging.info('Synchronizing from commit {}'.format(last_commit))

# Add dmlc/tvm to remote 'upstream' if not
repo = Repo()
add_remote(repo, 'upstream', 'git@github.com:dmlc/tvm.git')

# Fetch 'upstream' remote
logging.info("Fetching remote upstrean")
upstream = repo.remote('upstream')
upstream.fetch()

# Switch to 'master' in 'upstream'
repo.git.checkout('upstream/master')

# Save HEAD commit
head = repo.commit('HEAD')
head_commit = head.hexsha

# Switch back to 'dev' branch to do cherry pick
repo.git.checkout('dev')

# Do the cherry-pick from last_commit to head_commit
repo.git.cherry_pick('{}..{}'.format(last_commit, head_commit))

# Update submodule
repo.git.submodule('update')

with open(last_commit_file, 'w') as f:
f.write(head_commit)

logging.info("Update successfully")

if __name__ == '__main__':
main()
wweic marked this conversation as resolved.
Show resolved Hide resolved