-
Notifications
You must be signed in to change notification settings - Fork 637
/
diffstat.py
92 lines (73 loc) · 2.83 KB
/
diffstat.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from ..base import BitbucketCloudBase
class DiffStat(BitbucketCloudBase):
"""
Bitbucket Cloud repository diffstat entry.
This represents the changes for one specific file in a diff.
See https://developer.atlassian.com/cloud/bitbucket/rest/api-group-commits/#api-repositories-workspace-repo-slug-diffstat-spec-get
"""
MODIFIED = "modified"
ADDED = "added"
REMOVED = "removed"
LOCAL_DELETED = "local deleted"
REMOTE_DELETED = "remote deleted"
MERGE_CONFLICT = "merge conflict"
RENAME_CONFLICT = "rename conflict"
RENAME_DELETE_CONFLICT = "rename/delete conflict"
SUBREPO_CONFLICT = "subrepo conflict"
def __init__(self, data, *args, **kwargs):
"""See BitbucketCloudBase."""
super(DiffStat, self).__init__(None, None, *args, data=data, expected_type="diffstat", **kwargs)
@property
def lines_removed(self):
"""Lines removed."""
return self.get_data("lines_removed")
@property
def lines_added(self):
"""Lines added."""
return self.get_data("lines_added")
@property
def old(self):
"""A CommitFile object, representing a file at a commit in a repository."""
return CommitFile(self.get_data("old"), **self._new_session_args)
@property
def new(self):
"""A CommitFile object, representing a file at a commit in a repository."""
return CommitFile(self.get_data("new"), **self._new_session_args)
@property
def has_conflict(self):
"""True if the change causes a conflict."""
return str(self.get_data("status")) in [
self.MERGE_CONFLICT,
self.RENAME_CONFLICT,
self.RENAME_DELETE_CONFLICT,
self.SUBREPO_CONFLICT,
self.LOCAL_DELETED,
self.REMOTE_DELETED,
]
class CommitFile(BitbucketCloudBase):
"""
Bitbucket Cloud repository diffstat file.
File reference from a diffstat entry.
See https://developer.atlassian.com/cloud/bitbucket/rest/api-group-commits/#api-repositories-workspace-repo-slug-diffstat-spec-get
"""
def __init__(self, data, *args, **kwargs):
"""See BitbucketCloudBase."""
if data is None: # handles add/remove
data = {
"path": None,
"escaped_path": None,
"links": {},
"type": "commit_file",
}
super(CommitFile, self).__init__(None, None, *args, data=data, expected_type="commit_file", **kwargs)
@property
def path(self):
"""The path in the repository."""
return self.get_data("path")
@property
def escaped_path(self):
"""
The escaped version of the path as it appears in a diff.
If the path does not require escaping this will be the same as path.
"""
return self.get_data("escaped_path")