contrib/nautilus-thg.py
changeset 1181 ab9654ce0550
parent 1180 1c95c2301e5f
equal deleted inserted replaced
1180:1c95c2301e5f 1181:ab9654ce0550
   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):