Skip to content

Commit 1f423c1

Browse files
committed
Add license/consensus specific options
1 parent 31bfd96 commit 1f423c1

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ delayoverride: 10
4949
# When `delayoverride` is set this value is the minimum hours without changes before the PR will be merged
5050
mergedelaymin: 1
5151

52+
# Require this amount of time in hours before a PR with a license change will be merged.
53+
licensedelay: 72
54+
55+
# Require this amount of time in hours before a PR with a consensus change will be merged.
56+
consensusdelay: 72
57+
58+
# Do not allow license changes to be merged.
59+
licenselock: true
60+
61+
# Do not allow consensus changes to be merged.
62+
consensuslock: true
63+
5264
# Number of hours after last action (commit or opening the pull request) before issue is autoclosed
5365
timeout: 720
5466
```

gitconsensus/gitconsensus.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def info(username, repository_name, pull_request):
5151
consensus = repo.getConsensus()
5252
click.echo("Mergeable: %s" % (consensus.isMergeable(request),))
5353
click.echo("Is Blocked: %s" % (request.isBlocked(),))
54+
click.echo("Is Allowed: %s" % (consensus.isAllowed(request),))
5455
click.echo("Has Quorum: %s" % (consensus.hasQuorum(request),))
5556
click.echo("Has Votes: %s" % (consensus.hasVotes(request),))
5657
click.echo("Has Aged: %s" % (consensus.hasAged(request),))

gitconsensus/repository.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,8 @@ def __init__(self, rules):
369369
def validate(self, pr):
370370
if pr.isBlocked():
371371
return False
372+
if not self.isAllowed(pr):
373+
return False
372374
if not self.isMergeable(pr):
373375
return False
374376
if not self.hasQuorum(pr):
@@ -379,6 +381,15 @@ def validate(self, pr):
379381
return False
380382
return True
381383

384+
def isAllowed(self, pr):
385+
if pr.changesLicense():
386+
if 'locklicense' in self.rules and self.rules['locklicense']:
387+
return False
388+
if pr.changesConsensus():
389+
if 'lockconsensus' in self.rules and self.rules['lockconsensus']:
390+
return False
391+
return True
392+
382393
def isMergeable(self, pr):
383394
if not pr.pr.mergeable:
384395
return False
@@ -401,9 +412,17 @@ def hasVotes(self, pr):
401412
return True
402413

403414
def hasAged(self, pr):
415+
hours = pr.hoursSinceLastUpdate()
416+
if pr.changesLicense():
417+
if 'licensedelay' in self.rules and self.rules['licensedelay']:
418+
if hours < self.rules['licensedelay']:
419+
return False
420+
if pr.changesConsensus():
421+
if 'consensusdelay' in self.rules and self.rules['consensusdelay']:
422+
if hours < self.rules['consensusdelay']:
423+
return False
404424
if 'mergedelay' not in self.rules:
405425
return True
406-
hours = pr.hoursSinceLastUpdate()
407426
if hours >= self.rules['mergedelay']:
408427
return True
409428
if 'delayoverride' in self.rules and self.rules['delayoverride']:

0 commit comments

Comments
 (0)