summaryrefslogtreecommitdiffstats
path: root/git-interface/git-update.py
diff options
context:
space:
mode:
authorLukas Fleischer <lfleischer@archlinux.org>2015-08-14 13:09:57 +0200
committerLukas Fleischer <lfleischer@archlinux.org>2015-08-16 06:49:12 +0200
commit4112e572aadbbc552749398010257be3a3ba802b (patch)
tree7554adaabec23d6ed964d97940e487dff9aaa225 /git-interface/git-update.py
parentda875276d477c344358f1ba1fa82dcb269fdb138 (diff)
downloadaurweb-4112e572aadbbc552749398010257be3a3ba802b.tar.xz
Add a restore command to the SSH interface
Implement a new command that can be used to restore deleted package bases without having to push a new commit. Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
Diffstat (limited to 'git-interface/git-update.py')
-rwxr-xr-xgit-interface/git-update.py21
1 files changed, 12 insertions, 9 deletions
diff --git a/git-interface/git-update.py b/git-interface/git-update.py
index d258385..5ff8b28 100755
--- a/git-interface/git-update.py
+++ b/git-interface/git-update.py
@@ -176,22 +176,25 @@ def die_commit(msg, commit):
sys.stderr.write("error: {:s}\n".format(msg))
exit(1)
-if len(sys.argv) != 4:
- die("invalid arguments")
-
-refname = sys.argv[1]
-sha1_old = sys.argv[2]
-sha1_new = sys.argv[3]
+repo = pygit2.Repository(repo_path)
user = os.environ.get("AUR_USER")
pkgbase = os.environ.get("AUR_PKGBASE")
privileged = (os.environ.get("AUR_PRIVILEGED", '0') == '1')
+if len(sys.argv) == 2 and sys.argv[1] == "restore":
+ if 'refs/heads/' + pkgbase not in repo.listall_references():
+ die('{:s}: repository not found: {:s}'.format(sys.argv[1], pkgbase))
+ refname = "refs/heads/master"
+ sha1_old = sha1_new = repo.lookup_reference('refs/heads/' + pkgbase).target
+elif len(sys.argv) == 4:
+ refname, sha1_old, sha1_new = sys.argv[1:3]
+else:
+ die("invalid arguments")
+
if refname != "refs/heads/master":
die("pushing to a branch other than master is restricted")
-repo = pygit2.Repository(repo_path)
-
db = mysql.connector.connect(host=aur_db_host, user=aur_db_user,
passwd=aur_db_pass, db=aur_db_name,
unix_socket=aur_db_socket, buffered=True)
@@ -291,7 +294,7 @@ if srcinfo_pkgbase != pkgbase:
# Ensure that packages are neither blacklisted nor overwritten.
cur.execute("SELECT ID FROM PackageBases WHERE Name = %s", [pkgbase])
-pkgbase_id = cur.fetchone()[0]
+pkgbase_id = cur.fetchone()[0] if cur.rowcount == 1 else 0
cur.execute("SELECT Name FROM PackageBlacklist")
blacklist = [row[0] for row in cur.fetchall()]