5 from model
import Model
9 Model
.__init
__ (self
, {
14 'name': cmds
.git_config('user.name'),
15 'email': cmds
.git_config('user.email'),
18 def add_signoff (self
):
19 '''Adds a standard Signed-off by: tag to the end
20 of the current commit message.'''
22 msg
= self
.get_commitmsg()
23 signoff
= ('Signed-off by: %s <%s>'
24 % (self
.get_name(), self
.get_email()))
26 if signoff
not in msg
:
27 self
.set_commitmsg (msg
+ '\n\n' + signoff
)
29 def set_latest_commitmsg (self
):
30 '''Queries git for the latest commit message and sets it in
33 commit_lines
= cmds
.git_show ('HEAD').split ('\n')
34 for idx
, msg
in enumerate (commit_lines
):
37 if msg
.startswith ('diff --git'):
40 commit_msg
.append (msg
)
41 self
.set_commitmsg ('\n'.join (commit_msg
).rstrip())
43 class GitRepoBrowserModel (Model
):
44 def __init__ (self
, branch
=''):
45 Model
.__init
__ (self
, {
49 # These are parallel lists
54 # All items below here are re-calculated in
57 'directory_entries': {},
59 # These are also parallel lists
67 # Collect data for the model
68 tree_info
= cmds
.git_ls_tree (self
.get_branch())
70 types
= map ( lambda (x
): x
[1], tree_info
)
71 sha1s
= map ( lambda (x
): x
[2], tree_info
)
72 files
= map ( lambda (x
): x
[3], tree_info
)
74 self
.add_types (*types
)
75 self
.add_files (*files
)
76 self
.add_sha1s (*sha1s
)
80 def reset_items (self
):
81 '''This scans over self.(files, sha1s, types) to generate
82 directories, directory_entries, itmes, item_sha1s,
89 self
.directory_entries
= {}
91 if self
.directory
: self
.directories
.append ('..')
93 dir_entries
= self
.directory_entries
94 dir_regex
= re
.compile ('([^/]+)/')
98 for idx
, file in enumerate (self
.files
):
100 orig_file
= str (file)
101 if not orig_file
.startswith (self
.directory
): continue
102 file = file[ len (self
.directory
): ]
105 # This is a directory...
106 match
= dir_regex
.match (file)
107 if not match
: continue
109 dirent
= match
.group (1) + '/'
110 if dirent
not in self
.directory_entries
:
111 self
.directory_entries
[dirent
] = []
113 if dirent
not in dirs_seen
:
114 dirs_seen
[dirent
] = True
115 self
.directories
.append (dirent
)
117 entry
= file.replace (dirent
, '')
118 entry_match
= dir_regex
.match (entry
)
120 subdir
= entry_match
.group (1) + '/'
121 if subdir
in subdirs_seen
: continue
122 subdirs_seen
[subdir
] = True
123 dir_entries
[dirent
].append (subdir
)
125 dir_entries
[dirent
].append (entry
)
127 self
.item_names
.append (file)
128 self
.item_sha1s
.append (self
.sha1s
[idx
])
129 self
.item_types
.append (self
.types
[idx
])
131 class GitCreateBranchModel (Model
):
133 Model
.__init
__ (self
, {
136 'local_branches': [],
137 'remote_branches': [],
143 remote_branches
= cmds
.git_branch (remote
=True)
144 local_branches
= cmds
.git_branch (remote
=False)
145 tags
= cmds
.git_tag()
148 self
.set_revision ('')
149 self
.set_local_branches (local_branches
)
150 self
.set_remote_branches (remote_branches
)