diff --git a/close_pull_requests.py b/close_pull_requests.py
deleted file mode 100755
index 202d2eb..0000000
--- a/close_pull_requests.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#! /usr/bin/env python
-# Copyright (C) 2011 OpenStack, LLC.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# 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.
-
-# Close Github pull requests with instructions to use Gerrit for
-# code review.  The list of projects is found in github.config
-# and should look like:
-
-# [project "GITHUB_PROJECT"]
-# close_pull = true
-
-# Github authentication information is read from github.secure.config,
-# which should look like:
-
-# [github]
-# username = GITHUB_USERNAME
-# password = GITHUB_PASSWORD
-#
-# or
-#
-# [github]
-# oauth_token = GITHUB_OAUTH_TOKEN
-
-import github
-import os
-import ConfigParser
-import logging
-import re
-
-logging.basicConfig(level=logging.ERROR)
-
-GITHUB_CONFIG = os.environ.get('GITHUB_CONFIG',
-                               '/home/gerrit2/github.config')
-GITHUB_SECURE_CONFIG = os.environ.get('GITHUB_SECURE_CONFIG',
-                                      '/home/gerrit2/github.secure.config')
-
-MESSAGE = """Thank you for contributing to OpenStack!
-
-%(project)s uses Gerrit for code review.
-
-Please visit http://wiki.openstack.org/GerritWorkflow and follow the instructions there to upload your change to Gerrit.
-"""
-
-PROJECT_RE = re.compile(r'^project\s+"(.*)"$')
-
-secure_config = ConfigParser.ConfigParser()
-secure_config.read(GITHUB_SECURE_CONFIG)
-config = ConfigParser.ConfigParser()
-config.read(GITHUB_CONFIG)
-
-if secure_config.has_option("github", "oauth_token"):
-    ghub = github.Github(secure_config.get("github", "oauth_token"))
-else:
-    ghub = github.Github(secure_config.get("github", "username"),
-                         secure_config.get("github", "password"))
-
-orgs = ghub.get_user().get_orgs()
-orgs_dict = dict(zip([o.login.lower() for o in orgs], orgs))
-for section in config.sections():
-    # Each section looks like [project "openstack/project"]
-    m = PROJECT_RE.match(section)
-    if not m: continue
-    project = m.group(1)
-
-    # Make sure we're supposed to close pull requests for this project:
-    if not (config.has_option(section, "close_pull") and
-            config.get(section, "close_pull").lower() == 'true'):
-        continue
-
-    # Find the project's repo
-    project_split = project.split('/', 1)
-    if len(project_split) > 1:
-        repo = orgs_dict[project_split[0].lower()].get_repo(project_split[1])
-    else:
-        repo = ghub.get_user().get_repo(project)
-
-    # Close each pull request
-    pull_requests = repo.get_pulls("open")
-    for req in pull_requests:
-        vars = dict(project=project)
-        issue_data = {"url": repo.url + "/issues/" + str(req.number)}
-        issue = github.Issue.Issue(req._requester, issue_data, completed = True)
-        issue.create_comment(MESSAGE % vars)
-        req.edit(state = "closed")
