@@ -326,6 +326,19 @@  def pkgbase_unvote(pkgbase, user):
     conn.commit()
+def list_voted(user):
+    conn = aurweb.db.Connection()
+
+    userid = conn.fetch_userid(user)
+
+    cur = conn.execute("SELECT Name FROM PackageBases JOIN PackageVotes " +
+                       "ON ID = PackageBaseID " +
+                       "WHERE UsersID = ?", [userid])
+    for row in cur:
+        print(row[0])
+    conn.close()
+
+
 def pkgbase_set_keywords(pkgbase, keywords):
     pkgbase_id = pkgbase_from_name(pkgbase)
     if not pkgbase_id:
@@ -508,6 +521,9 @@  def serve(action, cmdargv, user, privileged, remote_addr):
         pkgbase = cmdargv[1]
         pkgbase_unvote(pkgbase, user)
+    elif action == 'list-voted':
+        checkarg(cmdargv)
+        list_voted(user)
     elif action == 'set-comaintainers':
         checkarg_atleast(cmdargv, 'repository name')
@@ -515,12 +531,14 @@  def serve(action, cmdargv, user, privileged, remote_addr):
         userlist = cmdargv[2:]
         pkgbase_set_comaintainers(pkgbase, userlist, user, privileged)
     elif action == 'help':
+        # commands in alphabetical order, git-* at the end
         cmds = {
             "adopt <name>": "Adopt a package base.",
             "disown <name>": "Disown a package base.",
             "flag <name> <comment>": "Flag a package base out-of-date.",
             "help": "Show this help message and exit.",
             "list-repos": "List all your repositories.",
+            "list-voted": "List voted packages.",
             "restore <name>": "Restore a deleted package base.",
             "set-comaintainers <name> [...]": "Set package base
co-maintainers.",
             "set-keywords <name> [...]": "Change package base keywords.",
@@ -466,6 +466,12 @@  test_expect_success "Vote for a package base." '
  EOF
  echo "SELECT NumVotes FROM PackageBases WHERE Name = \"foobar\";" | \
  sqlite3 aur.db >actual &&
+ test_cmp expected actual &&
+ SSH_ORIGINAL_COMMAND="list-voted" AUR_USER=user AUR_PRIVILEGED=0 \
+ "$GIT_SERVE" 2>&1 >actual &&
+ cat >expected <<-EOF &&
+ foobar
+ EOF
  test_cmp expected actual
 '
@@ -484,6 +490,12 @@  test_expect_success "Vote for a package base twice." '
  EOF
  echo "SELECT NumVotes FROM PackageBases WHERE Name = \"foobar\";" | \
  sqlite3 aur.db >actual &&
+ test_cmp expected actual &&
+ SSH_ORIGINAL_COMMAND="list-voted" AUR_USER=user AUR_PRIVILEGED=0 \
+ "$GIT_SERVE" 2>&1 >actual &&
+ cat >expected <<-EOF &&
+ foobar
+ EOF
  test_cmp expected actual
 '
@@ -500,6 +512,11 @@  test_expect_success "Remove vote from a package base." '
  EOF
  echo "SELECT NumVotes FROM PackageBases WHERE Name = \"foobar\";" | \
  sqlite3 aur.db >actual &&
+ test_cmp expected actual &&
+ SSH_ORIGINAL_COMMAND="list-voted" AUR_USER=user AUR_PRIVILEGED=0 \
+ "$GIT_SERVE" 2>&1 >actual &&
+ cat >expected <<-EOF &&
+ EOF
  test_cmp expected actual
 '
@@ -518,6 +535,11 @@  test_expect_success "Try to remove the vote again." '
  EOF
  echo "SELECT NumVotes FROM PackageBases WHERE Name = \"foobar\";" | \
  sqlite3 aur.db >actual &&
+ test_cmp expected actual &&
+ SSH_ORIGINAL_COMMAND="list-voted" AUR_USER=user AUR_PRIVILEGED=0 \
+ "$GIT_SERVE" 2>&1 >actual &&
+ cat >expected <<-EOF &&
+ EOF
  test_cmp expected actual
 '