Skip to content

Commit 8e5ad54

Browse files
committed
Add option preventing users from voting for two different options
1 parent ff38b50 commit 8e5ad54

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ will be skipped.
1313
# Add extra labels for the vote counts and age when merging
1414
extra_labels: false
1515

16+
# Don't count any vote from a user who votes for multiple options
17+
prevent_doubles: true
18+
1619
# Minimum number of voters
1720
quorum: 5
1821

gitconsensus/repository.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
1111
## Vote Totals
1212
13-
| Yes | No | Abstain | Total |
14-
| --- | -- | ------- | ----- |
15-
| %s | %s | %s | %s |
13+
| Yes | No | Abstain | Voters |
14+
| --- | -- | ------- | ------ |
15+
| %s | %s | %s | %s |
1616
1717
1818
## Vote Breakdown
@@ -99,11 +99,15 @@ def __init__(self, repository, number):
9999
self.no = []
100100
self.abstain = []
101101
self.users = []
102+
self.doubles = []
102103
for reaction in reactions:
103104
content = reaction['content']
104105
user = reaction['user']
105106
username = user['login']
106107

108+
if username in self.doubles:
109+
continue
110+
107111
if 'collaborators_only' in self.repository.rules and self.repository.rules['collaborators_only']:
108112
if not isCollaborator(username):
109113
continue
@@ -116,6 +120,19 @@ def __init__(self, repository, number):
116120
if username not in self.repository.rules['whitelist']:
117121
continue
118122

123+
if 'prevent_doubles' in self.repository.rules and self.repository.rules['prevent_doubles']:
124+
# make sure user hasn't voted twice
125+
if username in self.users:
126+
self.doubles.append(username)
127+
self.users.remove(username)
128+
if username in self.yes:
129+
self.yes.remove(username)
130+
if username in self.no:
131+
self.no.remove(username)
132+
if username in self.abstain:
133+
self.abstain.remove(username)
134+
continue
135+
119136
if content == '+1':
120137
self.yes.append(user['login'])
121138
elif content == '-1':
@@ -199,6 +216,13 @@ def commentAction(self, action):
199216
consensus.hasQuorum(self),
200217
consensus.hasVotes(self)
201218
)
219+
220+
if len(self.doubles) > 0:
221+
duplist = ["[%s](https://github.com/%s)" % (username, username) for username in self.doubles]
222+
dupuserstring = ', '.join(duplist)
223+
dupstring = '\n\nThe following users voted for multiple options and were exlcuded: \n%s' % (dupuserstring)
224+
message = "%s\n%s" % (message, dupstring)
225+
202226
self.addComment(message)
203227

204228
def buildVoteTable(self):

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
long_description = open('README.md').read()
1414

1515

16-
version = '0.2.0'
16+
version = '0.3.0'
1717
setup(
1818

1919
name = 'gitconsensus',

0 commit comments

Comments
 (0)