193 self.cacherepo = None |
193 self.cacherepo = None |
194 self.cacheroot = None |
194 self.cacheroot = None |
195 |
195 |
196 def get_background_items(self, window, vfs_file): |
196 def get_background_items(self, window, vfs_file): |
197 '''Build context menu for current directory''' |
197 '''Build context menu for current directory''' |
198 items = [] |
198 mainitem = nautilus.MenuItem('HgNautilus', 'Mercurial', '') |
|
199 submenu = nautilus.Menu() |
|
200 mainitem.set_submenu(submenu) |
|
201 |
199 path = self.get_path_for_vfs_file(vfs_file) |
202 path = self.get_path_for_vfs_file(vfs_file) |
200 if path is None: |
203 if path is None: |
201 return |
204 return |
|
205 |
202 repo = self.get_repo_for_path(path) |
206 repo = self.get_repo_for_path(path) |
203 if repo is None: |
207 if repo is None: |
|
208 ''' The name given to nautilus.MenuItem decides the |
|
209 of the menu, which is ordered alpahbetically ''' |
204 item = nautilus.MenuItem('HgNautilus::newtree', |
210 item = nautilus.MenuItem('HgNautilus::newtree', |
205 'Create New Repository', |
211 'Create New Repository', |
206 'Make directory versioned', |
212 'Make directory versioned', |
207 self.icon('menucreaterepos.ico')) |
213 self.icon('menucreaterepos.ico')) |
208 item.connect('activate', self._init_cb, vfs_file) |
214 item.connect('activate', self._init_cb, vfs_file) |
209 items.append(item) |
215 submenu.append_item(item) |
|
216 |
210 item = nautilus.MenuItem('HgNautilus::clone', |
217 item = nautilus.MenuItem('HgNautilus::clone', |
211 'Create Clone', |
218 'Create Clone', |
212 'Create clone here from source', |
219 'Create clone here from source', |
213 self.icon('menuclone.ico')) |
220 self.icon('menuclone.ico')) |
214 item.connect('activate', self._clone_cb, vfs_file) |
221 item.connect('activate', self._clone_cb, vfs_file) |
215 items.append(item) |
222 submenu.append_item(item) |
216 item = nautilus.MenuItem('HgNautilus::about', |
223 |
|
224 item = nautilus.MenuItem('HgNautilus::99about', |
217 'About TortoiseHg', |
225 'About TortoiseHg', |
218 'Information about TortoiseHg installation', |
226 'Information about TortoiseHg installation', |
219 self.icon('menuabout.ico')) |
227 self.icon('menuabout.ico')) |
220 item.connect('activate', self._about_cb, vfs_file) |
228 item.connect('activate', self._about_cb, vfs_file) |
221 items.append(item) |
229 submenu.append_item(item) |
222 item = nautilus.MenuItem('HgNautilus::terminal', |
230 |
223 'Open Terminal Here', |
231 return mainitem, |
224 'Open terminal in current directory') |
|
225 item.connect('activate', self._open_terminal_cb, vfs_file) |
|
226 items.append(item) |
|
227 return items |
|
228 |
232 |
229 if len(repo.workingctx().parents()) > 1: |
233 if len(repo.workingctx().parents()) > 1: |
230 self.rev0 = repo.workingctx().parents()[0].rev() |
234 self.rev0 = repo.workingctx().parents()[0].rev() |
231 item = nautilus.MenuItem('HgNautilus::undomerge', |
235 item = nautilus.MenuItem('HgNautilus::undomerge', |
232 'Undo Merge', |
236 'Undo Merge', |
233 'Clean checkout of original parent revision', |
237 'Clean checkout of original parent revision', |
234 self.icon('menuunmerge.ico')) |
238 self.icon('menuunmerge.ico')) |
235 item.connect('activate', self._unmerge_cb, vfs_file) |
239 item.connect('activate', self._unmerge_cb, vfs_file) |
236 items.append(item) |
240 submenu.append_item(item) |
237 |
241 |
238 item = nautilus.MenuItem('HgNautilus::commit', |
242 item = nautilus.MenuItem('HgNautilus::10commit', |
239 'Commit', |
243 'Commit', |
240 'Commit changes', |
244 'Commit changes', |
241 self.icon('menucommit.ico')) |
245 self.icon('menucommit.ico')) |
242 item.connect('activate', self._commit_cb, [vfs_file]) |
246 item.connect('activate', self._commit_cb, [vfs_file]) |
243 items.append(item) |
247 submenu.append_item(item) |
244 |
248 |
245 item = nautilus.MenuItem('HgNautilus::status', |
249 item = nautilus.MenuItem('HgNautilus::20status', |
246 'Show Status', |
250 'Show Status', |
247 'Show Repository Status', |
251 'Show Repository Status', |
248 self.icon('menushowchanged.ico')) |
252 self.icon('menushowchanged.ico')) |
249 item.connect('activate', self._status_cb, vfs_file) |
253 item.connect('activate', self._status_cb, vfs_file) |
250 items.append(item) |
254 submenu.append_item(item) |
251 |
255 |
252 item = nautilus.MenuItem('HgNautilus::diff', |
256 item = nautilus.MenuItem('HgNautilus::30diff', |
253 'Visual Diff', |
257 'Visual Diff', |
254 'Show Changes to Repository', |
258 'Show Changes to Repository', |
255 self.icon('menudiff.ico')) |
259 self.icon('menudiff.ico')) |
256 item.connect('activate', self._diff_cb, [vfs_file]) |
260 item.connect('activate', self._diff_cb, [vfs_file]) |
257 items.append(item) |
261 submenu.append_item(item) |
258 |
262 |
259 item = nautilus.MenuItem('HgNautilus::dag', |
263 item = nautilus.MenuItem('HgNautilus::40dag', |
260 'Revision History', |
264 'Revision History', |
261 'Show revision DAG', |
265 'Show revision DAG', |
262 self.icon('menurevisiongraph.ico')) |
266 self.icon('menurevisiongraph.ico')) |
263 item.connect('activate', self._history_cb, [vfs_file]) |
267 item.connect('activate', self._history_cb, [vfs_file]) |
264 items.append(item) |
268 submenu.append_item(item) |
265 |
269 |
266 item = nautilus.MenuItem('HgNautilus::datamine', |
270 item = nautilus.MenuItem('HgNautilus::50datamine', |
267 'Data Mining', |
271 'Data Mining', |
268 'Search revision history', |
272 'Search revision history', |
269 self.icon('menulog.ico')) |
273 self.icon('menulog.ico')) |
270 item.connect('activate', self._datamine_cb, [vfs_file]) |
274 item.connect('activate', self._datamine_cb, [vfs_file]) |
271 items.append(item) |
275 submenu.append_item(item) |
272 |
276 |
273 item = nautilus.MenuItem('HgNautilus::sync', |
277 item = nautilus.MenuItem('HgNautilus::60sync', |
274 'Synchronize', |
278 'Synchronize', |
275 'Sync with another repository', |
279 'Sync with another repository', |
276 self.icon('menusynch.ico')) |
280 self.icon('menusynch.ico')) |
277 item.connect('activate', self._sync_cb, vfs_file) |
281 item.connect('activate', self._sync_cb, vfs_file) |
278 items.append(item) |
282 submenu.append_item(item) |
279 |
283 |
280 item = nautilus.MenuItem('HgNautilus::serve', |
284 item = nautilus.MenuItem('HgNautilus::70serve', |
281 'Web Server', |
285 'Web Server', |
282 'Start internal web server', |
286 'Start internal web server', |
283 self.icon('proxy.ico')) |
287 self.icon('proxy.ico')) |
284 item.connect('activate', self._serve_cb, vfs_file) |
288 item.connect('activate', self._serve_cb, vfs_file) |
285 items.append(item) |
289 submenu.append_item(item) |
286 |
290 |
287 item = nautilus.MenuItem('HgNautilus::recover', |
291 item = nautilus.MenuItem('HgNautilus::75recover', |
288 'Recovery', |
292 'Recovery', |
289 'General repair and recovery of repository', |
293 'General repair and recovery of repository', |
290 self.icon('general.ico')) |
294 self.icon('general.ico')) |
291 item.connect('activate', self._recovery_cb, vfs_file) |
295 item.connect('activate', self._recovery_cb, vfs_file) |
292 items.append(item) |
296 submenu.append_item(item) |
293 |
297 |
294 item = nautilus.MenuItem('HgNautilus::repoconfig', |
298 item = nautilus.MenuItem('HgNautilus::80repoconfig', |
295 'Repository Settings', |
299 'Repository Settings', |
296 'Configure Mercurial settings for this repo', |
300 'Configure Mercurial settings for this repo', |
297 self.icon('menusettings.ico')) |
301 self.icon('menusettings.ico')) |
298 item.connect('activate', self._thgconfig_repo_cb, vfs_file) |
302 item.connect('activate', self._thgconfig_repo_cb, vfs_file) |
299 items.append(item) |
303 submenu.append_item(item) |
300 |
304 |
301 item = nautilus.MenuItem('HgNautilus::userconfig', |
305 item = nautilus.MenuItem('HgNautilus::85userconfig', |
302 'User-Global Settings', |
306 'User-Global Settings', |
303 'Configure global Mercurial settings', |
307 'Configure global Mercurial settings', |
304 self.icon('menusettings.ico')) |
308 self.icon('menusettings.ico')) |
305 item.connect('activate', self._thgconfig_user_cb, vfs_file) |
309 item.connect('activate', self._thgconfig_user_cb, vfs_file) |
306 items.append(item) |
310 submenu.append_item(item) |
307 |
311 |
308 item = nautilus.MenuItem('HgNautilus::about', |
312 item = nautilus.MenuItem('HgNautilus::99about', |
309 'About TortoiseHg', |
313 'About TortoiseHg', |
310 'Information about TortoiseHg installation', |
314 'Information about TortoiseHg installation', |
311 self.icon('menuabout.ico')) |
315 self.icon('menuabout.ico')) |
312 item.connect('activate', self._about_cb, vfs_file) |
316 item.connect('activate', self._about_cb, vfs_file) |
313 items.append(item) |
317 submenu.append_item(item) |
314 |
318 |
315 item = nautilus.MenuItem('HgNautilus::terminal', |
319 return mainitem, |
316 'Open Terminal Here', |
|
317 'Open terminal in current directory') |
|
318 item.connect('activate', self._open_terminal_cb, vfs_file) |
|
319 items.append(item) |
|
320 return items |
|
321 |
320 |
322 def get_file_items(self, window, vfs_files): |
321 def get_file_items(self, window, vfs_files): |
|
322 mainitem = nautilus.MenuItem('HgNautilus', 'Mercurial', '') |
|
323 submenu = nautilus.Menu() |
|
324 mainitem.set_submenu(submenu) |
|
325 |
323 '''Build context menu for selected files''' |
326 '''Build context menu for selected files''' |
324 items = [] |
|
325 if not vfs_files: |
327 if not vfs_files: |
326 return items |
328 return None |
327 |
329 |
328 vfs_file = vfs_files[0] |
330 vfs_file = vfs_files[0] |
329 path = self.get_path_for_vfs_file(vfs_file) |
331 path = self.get_path_for_vfs_file(vfs_file) |
330 repo = self.get_repo_for_path(path) |
332 repo = self.get_repo_for_path(path) |
331 if repo is None: |
333 if repo is None: |
332 if not vfs_file.is_directory(): |
334 if not vfs_file.is_directory(): |
333 return items |
335 return None |
334 |
336 |
335 # Menu for unrevisioned subdirectory |
337 # Menu for unrevisioned subdirectory |
336 name = vfs_files[0].get_name() |
338 name = vfs_files[0].get_name() |
337 item = nautilus.MenuItem('HgNautilus::newtree', |
339 item = nautilus.MenuItem('HgNautilus::10newtree', |
338 'Make directory versioned', |
340 'Make directory versioned', |
339 'Create Repository in %s' % name, |
341 'Create Repository in %s' % name, |
340 self.icon('menucreaterepos.ico')) |
342 self.icon('menucreaterepos.ico')) |
341 item.connect('activate', self._init_cb, vfs_file) |
343 item.connect('activate', self._init_cb, vfs_file) |
342 items.append(item) |
344 submenu.append_item(item) |
343 item = nautilus.MenuItem('HgNautilus::clone', |
345 |
|
346 item = nautilus.MenuItem('HgNautilus::20clone', |
344 'Create clone from source', |
347 'Create clone from source', |
345 'Create Clone in %s' % name, |
348 'Create Clone in %s' % name, |
346 self.icon('menuclone.ico')) |
349 self.icon('menuclone.ico')) |
347 item.connect('activate', self._clone_cb, vfs_file) |
350 item.connect('activate', self._clone_cb, vfs_file) |
348 items.append(item) |
351 submenu.append_item(item) |
349 item = nautilus.MenuItem('HgNautilus::about', |
352 |
|
353 item = nautilus.MenuItem('HgNautilus::99about', |
350 'About TortoiseHg', |
354 'About TortoiseHg', |
351 'Information about TortoiseHg installation', |
355 'Information about TortoiseHg installation', |
352 self.icon('menuabout.ico')) |
356 self.icon('menuabout.ico')) |
353 item.connect('activate', self._about_cb, vfs_file) |
357 item.connect('activate', self._about_cb, vfs_file) |
354 items.append(item) |
358 submenu.append_item(item) |
355 item = nautilus.MenuItem('HgNautilus::terminal', |
359 |
356 'Open Terminal Here', |
360 return mainitem, |
357 'Open Terminal in %s' % name) |
|
358 item.connect('activate', self._open_terminal_cb, vfs_file) |
|
359 items.append(item) |
|
360 return items |
|
361 |
361 |
362 localpaths = [] |
362 localpaths = [] |
363 for vfs_file in vfs_files: |
363 for vfs_file in vfs_files: |
364 path = self.get_path_for_vfs_file(vfs_file) |
364 path = self.get_path_for_vfs_file(vfs_file) |
365 if path is None: |
365 if path is None: |
371 (lookup, modified, added, removed, deleted, unknown, |
371 (lookup, modified, added, removed, deleted, unknown, |
372 ignored, clean) = changes |
372 ignored, clean) = changes |
373 |
373 |
374 # Add menu items based on states list |
374 # Add menu items based on states list |
375 if unknown: |
375 if unknown: |
376 item = nautilus.MenuItem('HgNautilus::add', |
376 item = nautilus.MenuItem('HgNautilus::30add', |
377 'Add Files', |
377 'Add Files', |
378 'Add unversioned files', |
378 'Add unversioned files', |
379 self.icon('menuadd.ico')) |
379 self.icon('menuadd.ico')) |
380 item.connect('activate', self._add_cb, vfs_files) |
380 item.connect('activate', self._add_cb, vfs_files) |
381 items.append(item) |
381 submenu.append_item(item) |
382 |
382 |
383 if modified or added or removed or deleted or unknown: |
383 if modified or added or removed or deleted or unknown: |
384 item = nautilus.MenuItem('HgNautilus::commit', |
384 item = nautilus.MenuItem('HgNautilus::40commit', |
385 'Commit Files', |
385 'Commit Files', |
386 'Commit changes', |
386 'Commit changes', |
387 self.icon('menucommit.ico')) |
387 self.icon('menucommit.ico')) |
388 item.connect('activate', self._commit_cb, vfs_files) |
388 item.connect('activate', self._commit_cb, vfs_files) |
389 items.append(item) |
389 submenu.append_item(item) |
390 item = nautilus.MenuItem('HgNautilus::revert', |
390 |
|
391 item = nautilus.MenuItem('HgNautilus::50revert', |
391 'Undo Changes', |
392 'Undo Changes', |
392 'Revert changes to files', |
393 'Revert changes to files', |
393 self.icon('menurevert.ico')) |
394 self.icon('menurevert.ico')) |
394 item.connect('activate', self._revert_cb, vfs_files) |
395 item.connect('activate', self._revert_cb, vfs_files) |
395 items.append(item) |
396 submenu.append_item(item) |
396 |
397 |
397 if modified or clean: |
398 if modified or clean: |
398 item = nautilus.MenuItem('HgNautilus::log', |
399 item = nautilus.MenuItem('HgNautilus::60log', |
399 'File Changelog', |
400 'File Changelog', |
400 'Show file revision history', |
401 'Show file revision history', |
401 self.icon('menulog.ico')) |
402 self.icon('menulog.ico')) |
402 item.connect('activate', self._history_cb, vfs_files) |
403 item.connect('activate', self._history_cb, vfs_files) |
403 items.append(item) |
|
404 item = nautilus.MenuItem('HgNautilus::annotate', |
404 item = nautilus.MenuItem('HgNautilus::annotate', |
405 'Annotate File', |
405 'Annotate File', |
406 'Annotate file at current revision', |
406 'Annotate file at current revision', |
407 self.icon('menulog.ico')) |
407 self.icon('menulog.ico')) |
408 item.connect('activate', self._datamine_cb, vfs_files) |
408 item.connect('activate', self._datamine_cb, vfs_files) |
409 items.append(item) |
409 submenu.append_item(item) |
410 |
410 |
411 |
411 |
412 if modified: |
412 if modified: |
413 item = nautilus.MenuItem('HgNautilus::diff', |
413 item = nautilus.MenuItem('HgNautilus::70diff', |
414 'File Diffs', |
414 'File Diffs', |
415 'Show file changes', |
415 'Show file changes', |
416 self.icon('menudiff.ico')) |
416 self.icon('menudiff.ico')) |
417 item.connect('activate', self._diff_cb, vfs_files) |
417 item.connect('activate', self._diff_cb, vfs_files) |
418 items.append(item) |
418 submenu.append_item(item) |
419 |
419 |
420 return items |
420 return mainitem, |
421 |
421 |
422 def get_columns(self): |
422 def get_columns(self): |
423 return nautilus.Column("HgNautilus::hg_status", |
423 return nautilus.Column("HgNautilus::80hg_status", |
424 "hg_status", |
424 "hg_status", |
425 "HG Status", |
425 "HG Status", |
426 "Version control status"), |
426 "Version control status"), |
427 |
427 |
428 def _get_file_status(self, repo, localpath): |
428 def _get_file_status(self, repo, localpath): |