Check .gitreview file in repo for location of gerrit.

Change-Id: I5f344bb28155c42538c4a93ea0cefbef999a2957
This commit is contained in:
James E. Blair 2011-10-14 10:12:04 -04:00
parent 69742538e9
commit 22cdd15b5d
4 changed files with 36 additions and 31 deletions

4
.gitreview Normal file
View File

@ -0,0 +1,4 @@
[gerrit]
host=review.openstack.org
port=29418
project=openstack-ci/git-review.git

View File

@ -8,7 +8,9 @@ git-review is a tool that helps submitting git branches to gerrit for review
git-review, by default, looks for a git remote called gerrit, and submits the current branch to HEAD:refs/for/master at that remote. git-review, by default, looks for a git remote called gerrit, and submits the current branch to HEAD:refs/for/master at that remote.
For example, to set it to the OpenStack Compute (nova) project (assuming you have previously signed in to the [OpenStack Gerrit server](https://review.openstack.org) with your Launchpad account), you would do: If the "gerrit" remote does not exist, git-review looks for a file called .gitreview at the root of the repository with information about the gerrit remote.
If you want to manually create a gerrit remote, for example, to set it to the OpenStack Compute (nova) project (assuming you have previously signed in to the [OpenStack Gerrit server](https://review.openstack.org) with your Launchpad account), you would do:
USERNAME=jsmith # Launchpad username here USERNAME=jsmith # Launchpad username here
PROJECT=openstack/nova PROJECT=openstack/nova

View File

@ -57,3 +57,14 @@ OPTIONS
Turns on more verbose output. Turns on more verbose output.
PROJECT CONFIGURATION
---------------------
To use git-review with your project, it is recommended that you create
a file at the root of the repository called ".gitreview" and place
information about your gerrit installation in it. The format is::
[gerrit]
host=review.example.com
port=29418
project=project.git

View File

@ -21,14 +21,13 @@ import json
from distutils.version import StrictVersion from distutils.version import StrictVersion
from urlparse import urlparse from urlparse import urlparse
import ConfigParser
import os import os
import sys import sys
import time import time
import re import re
version = "1.2" version = "1.2"
VERBOSE = False VERBOSE = False
@ -117,7 +116,7 @@ def add_remote(username, hostname, port, project):
if port is None: if port is None:
port = 29418 port = 29418
remote_url = "ssh://%s@%s:%s/%s.git" % (username, hostname, port, project) remote_url = "ssh://%s@%s:%s/%s" % (username, hostname, port, project)
if VERBOSE: if VERBOSE:
print "No remote set, testing %s" % remote_url print "No remote set, testing %s" % remote_url
@ -155,30 +154,6 @@ def split_hostname(fetch_url):
return (None, hostname, None) return (None, hostname, None)
def map_known_locations(hostname, team, project):
# Assume that if we don't know about it, it's a proper gerrit location
if VERBOSE:
print "Mapping %s, %s, %s to a gerrit" % (hostname, team, project)
if hostname == "github.com":
# Welp, OBVIOUSLY _this_ isn't a gerrit
if team is not None and team in ("openstack", "openstack-ci"):
return ("review.openstack.org", "%s/%s" % (team, project))
os_github_url = "http://github.com/api/v2/json/repos/show/openstack"
os_projects_file = os.path.join(CONFIGDIR, "openstack.json")
os_json = json.load(urllib.urlopen(os_github_url))
os_projects = []
if os_json.get('repositories', None) is not None:
os_projects = [repo['name'] for repo in os_json['repositories']]
if project in os_projects:
return ("review.openstack.org", "openstack/%s" % project)
else:
raise Exception("No possible way to guess given the input")
return hostname
def parse_git_show(remote, verb): def parse_git_show(remote, verb):
fetch_url = "" fetch_url = ""
for line in run_command("git remote show -n %s" % remote).split("\n"): for line in run_command("git remote show -n %s" % remote).split("\n"):
@ -228,12 +203,25 @@ def check_remote(remote):
print output print output
return return
(hostname, team, username, port, project_name) = \ # Check for a .gitreview at the top of the repo with the gerrit location
parse_git_show("origin", "Fetch") top_dir = run_command('git rev-parse --show-toplevel')
target_file = os.path.join(top_dir, ".gitreview")
if os.path.exists(target_file):
config = ConfigParser.ConfigParser(dict(port='29418'))
config.read(target_file)
hostname = config.get("gerrit", "host")
port = config.get("gerrit", "port")
project = config.get("gerrit", "project")
username = None
else:
print "No '.gitreview' file found in this repository."
print "We don't know where your gerrit is. Please manually create "
print "a remote named gerrit and try again."
sys.exit(1)
# Gerrit remote not present, try to add it # Gerrit remote not present, try to add it
try: try:
(hostname, project) = map_known_locations(hostname, team, project_name)
add_remote(username, hostname, port, project) add_remote(username, hostname, port, project)
except: except:
print sys.exc_info()[2] print sys.exc_info()[2]