1328 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			1328 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # coding=utf8
 | |
| import sublime_plugin, sublime
 | |
| import os
 | |
| import re
 | |
| 
 | |
| from sidebar.SideBarSelection import SideBarSelection
 | |
| from sidebar.SideBarGit import SideBarGit
 | |
| 
 | |
| try:
 | |
| 	from BufferScroll import BufferScrollAPI
 | |
| except:
 | |
| 	BufferScrollAPI = False
 | |
| 
 | |
| class Object():
 | |
| 	pass
 | |
| 
 | |
| #run last command again on a focused tab when pressing F5
 | |
| 
 | |
| class SideBarGitRefreshTabContentsByRunningCommandAgain(sublime_plugin.WindowCommand):
 | |
| 	def run(self):
 | |
| 		window = sublime.active_window()
 | |
| 		if not window:
 | |
| 			return
 | |
| 		view 	 =  window.active_view()
 | |
| 		if view is None:
 | |
| 			return
 | |
| 		if view.settings().has('SideBarGitIsASideBarGitTab'):
 | |
| 			SideBarGit().run(
 | |
| 												[],
 | |
| 												view.settings().get('SideBarGitModal'),
 | |
| 												view.settings().get('SideBarGitBackground'),
 | |
| 												view,
 | |
| 												view.settings().get('SideBarGitCommand'),
 | |
| 												view.settings().get('SideBarGitItem'),
 | |
| 												view.settings().get('SideBarGitToStatusBar'),
 | |
| 												view.settings().get('SideBarGitTitle'),
 | |
| 												view.settings().get('SideBarGitNoResults'),
 | |
| 												view.settings().get('SideBarGitSyntaxFile')
 | |
| 												)
 | |
| 		elif view.file_name():
 | |
| 			if BufferScrollAPI:
 | |
| 				BufferScrollAPI.save(view, 'sidebar-git');
 | |
| 			view.run_command("revert")
 | |
| 			if BufferScrollAPI:
 | |
| 				BufferScrollAPI.restore(view, 'sidebar-git');
 | |
| 
 | |
| 	def is_enabled(self):
 | |
| 		window = sublime.active_window()
 | |
| 		if not window:
 | |
| 			return False
 | |
| 		view 	 =  window.active_view()
 | |
| 		if view is None:
 | |
| 			return False
 | |
| 		if view.settings().has('SideBarGitIsASideBarGitTab') or view.file_name():
 | |
| 			return True
 | |
| 
 | |
| 
 | |
| def closed_affected_items(items):
 | |
| 	closed_items = []
 | |
| 	for item in items:
 | |
| 		if not item.isDirectory():
 | |
| 			closed_items += item.close_associated_buffers()
 | |
| 	return closed_items
 | |
| 
 | |
| def reopen_affected_items(closed_items):
 | |
| 	for item in closed_items:
 | |
| 		file_name, window, view_index = item
 | |
| 		if window and os.path.exists(file_name):
 | |
| 			view = window.open_file(file_name)
 | |
| 			window.set_view_index(view, view_index[0], view_index[1])
 | |
| #Following code for selected files or folders
 | |
| 
 | |
| class SideBarGitDiffAllChangesSinceLastCommitCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'diff', 'HEAD', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Diff: '+item.name()+'.diff'
 | |
| 			object.no_results = 'No differences to show'
 | |
| 			object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDiffAllChangesSinceLastCommitIgnoreWhiteSpaceCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'diff', 'HEAD', '--no-color', '-w', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Diff: '+item.name()+'.diff'
 | |
| 			object.no_results = 'No differences to show'
 | |
| 			object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDiffChangesNotStagedCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'diff', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Diff: '+item.name()+'.diff'
 | |
| 			object.no_results = 'No differences to show'
 | |
| 			object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDiffChangesStagedNotCommitedCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'diff', '--no-color', '--staged', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Diff: '+item.name()+'.diff'
 | |
| 			object.no_results = 'No differences to show'
 | |
| 			object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDiffBetweenIndexAndLastCommitCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'diff', '--no-color', '--cached', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Diff: '+item.name()+'.diff'
 | |
| 			object.no_results = 'No differences to show'
 | |
| 			object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDiffBetweenRemoteAndLastLocalCommitCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'diff', '--no-color', 'origin/master..', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Diff: '+item.name()+'.diff'
 | |
| 			object.no_results = 'No differences to show'
 | |
| 			object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDiffBetweenLastLocalCommitAndRemoteCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'diff', '--no-color', '..origin/master', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Diff: '+item.name()+'.diff'
 | |
| 			object.no_results = 'No differences to show'
 | |
| 			object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDifftoolAllChangesSinceLastCommitCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'difftool', 'HEAD', '--', item.forCwdSystemName()]
 | |
| 			SideBarGit().run(object, background=True)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDifftoolChangesNotStagedCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'difftool', '--', item.forCwdSystemName()]
 | |
| 			SideBarGit().run(object, background=True)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDifftoolChangesStagedNotCommitedCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'difftool', '--staged', '--', item.forCwdSystemName()]
 | |
| 			SideBarGit().run(object, background=True)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDifftoolBetweenIndexAndLastCommitCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'difftool', '--cached', '--', item.forCwdSystemName()]
 | |
| 			SideBarGit().run(object, background=True)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDifftoolBetweenRemoteAndLastLocalCommitCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'difftool', 'origin/master..', '--', item.forCwdSystemName()]
 | |
| 			SideBarGit().run(object, background=True)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitDifftoolBetweenLastLocalCommitAndRemoteCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'difftool', '..origin/master', '--', item.forCwdSystemName()]
 | |
| 			SideBarGit().run(object, background=True)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLogStatShortLatestCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'log', '-n', '30', '--pretty=short', '--decorate', '--graph', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Log: '+item.name()
 | |
| 			object.no_results = 'No log to show'
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLogStatShortFullCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'log', '--pretty=short', '--decorate', '--graph', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Log: '+item.name()
 | |
| 			object.no_results = 'No log to show'
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLogStatLatestCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'log', '-n', '30', '--stat', '--graph', '--decorate', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Log: '+item.name()
 | |
| 			object.no_results = 'No log to show'
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLogStatFullCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'log', '--stat', '--graph', '--decorate', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Log: '+item.name()
 | |
| 			object.no_results = 'No log to show'
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLogStatListLatestCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		import sys
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'log', '-n', '50', '--pretty=format:%s'.encode(sys.getfilesystemencoding()),  '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Log: '+item.name()
 | |
| 			object.no_results = 'No log to show'
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLogStatListCommitLatestCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		import sys
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'log', '-n', '50', '--pretty=format:%h %s'.encode(sys.getfilesystemencoding()), '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Log: '+item.name()
 | |
| 			object.no_results = 'No log to show'
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLogExtendedLatestCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'log', '-n', '30', '-p', '--decorate', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Log: '+item.name()
 | |
| 			object.no_results = 'No log to show'
 | |
| 			object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLogExtendedFullCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'log', '-p', '--decorate', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Log: '+item.name()
 | |
| 			object.no_results = 'No log to show'
 | |
| 			object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLogSinceLatestPushCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'log', 'origin/master..', '--stat', '--graph', '--decorate', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Log: '+item.name()
 | |
| 			object.no_results = 'No log to show'
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitReflogCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'reflog', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Reflog: '+item.name()
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitBlameCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'blame', '--no-color', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Blame: '+item.name()
 | |
| 			object.word_wrap = False
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).hasFiles()
 | |
| 
 | |
| class SideBarGitStatusCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'status', '--untracked-files=all', '--ignored', '--', item.forCwdSystemName()]
 | |
| 			object.title = 'Status: '+item.name()
 | |
| 			SideBarGit().run(object)
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitRevertTrackedCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		failed = False
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Discard changes to tracked on selected items? ', self.run, paths)
 | |
| 		else:
 | |
| 			items = SideBarSelection(paths).getSelectedItems()
 | |
| 			closed_items = closed_affected_items(items)
 | |
| 			for item in items:
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'checkout', 'HEAD', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 			if not failed:
 | |
| 				SideBarGit().status('Discarded changes to tracked on selected items')
 | |
| 			reopen_affected_items(closed_items)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitRevertTrackedCleanUntrackedCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		failed = False
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Discard changes to tracked and clean untracked on selected items? ', self.run, paths)
 | |
| 		else:
 | |
| 			for item in SideBarSelection(paths).getSelectedItems():
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'checkout', 'HEAD', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'clean', '-f', '-d', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 			if not failed:
 | |
| 				SideBarGit().status('Discarded changes to tracked and cleaned untracked on selected items')
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitRevertTrackedCleanUntrackedUnstageCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		failed = False
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Discard changes to tracked, clean untracked and unstage on selected items? ', self.run, paths)
 | |
| 		else:
 | |
| 			for item in SideBarSelection(paths).getSelectedItems():
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'checkout', 'HEAD', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'clean', '-f', '-d', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'reset', 'HEAD', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 			if not failed:
 | |
| 				SideBarGit().status('Discarded changes to tracked, cleaned untracked and unstage on selected items')
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitRevertTrackedUnstageCleanUntrackedCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		failed = False
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Discard changes to tracked, unstage and clean untracked on selected items? ', self.run, paths)
 | |
| 		else:
 | |
| 			for item in SideBarSelection(paths).getSelectedItems():
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'checkout', 'HEAD', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'reset', 'HEAD', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'clean', '-f', '-d', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 			if not failed:
 | |
| 				SideBarGit().status('Discarded changes to tracked, unstage and cleaned untracked on selected items')
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitRevertUnstageCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		failed = False
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Unstage selected items? ', self.run, paths)
 | |
| 		else:
 | |
| 			for item in SideBarSelection(paths).getSelectedItems():
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'reset', 'HEAD', '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 			if not failed:
 | |
| 				SideBarGit().status('Unstage selected items')
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitCheckoutToCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		failed = False
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Checkout selected items to object: ', '', self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			for item in SideBarSelection(paths).getSelectedItems():
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'checkout', content.encode(sys.getfilesystemencoding()), '--', item.forCwdSystemName()]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 			if not failed:
 | |
| 				SideBarGit().status('Checkout selected items to "'+content+'"')
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitIgnoreOpenCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			item.path(item.dirname())
 | |
| 			while not os.path.exists(item.join('.git')):
 | |
| 				if os.path.exists(item.join('.gitignore')):
 | |
| 					break;
 | |
| 				if item.dirname() == item.path():
 | |
| 					break;
 | |
| 				item.path(item.dirname())
 | |
| 
 | |
| 			if os.path.exists(item.join('.gitignore')):
 | |
| 				item.path(item.join('.gitignore'))
 | |
| 			else:
 | |
| 				item.path(item.join('.gitignore'))
 | |
| 				item.create()
 | |
| 			item.edit()
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitIgnoreAddCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedItems():
 | |
| 			original = item.path()
 | |
| 			originalIsDirectory = item.isDirectory()
 | |
| 			item.path(item.dirname())
 | |
| 			while not os.path.exists(item.join('.git')):
 | |
| 				if os.path.exists(item.join('.gitignore')):
 | |
| 					break;
 | |
| 				if item.dirname() == item.path():
 | |
| 					break;
 | |
| 				item.path(item.dirname())
 | |
| 
 | |
| 			if os.path.exists(item.join('.gitignore')):
 | |
| 				item.path(item.join('.gitignore'))
 | |
| 			else:
 | |
| 				if os.path.exists(item.join('.git')):
 | |
| 					item.path(item.join('.gitignore'))
 | |
| 					item.create()
 | |
| 				else:
 | |
| 					SideBarGit().status('Unable to found repository for "'+original.encode('utf-8')+'"')
 | |
| 					continue
 | |
| 			ignore_entry = re.sub('^/+', '', original.replace(item.dirname(), '').replace('\\', '/'))
 | |
| 			if originalIsDirectory:
 | |
| 				ignore_entry = '/'+ignore_entry
 | |
| 			content = item.contentUTF8().strip()+'\n'+ignore_entry
 | |
| 			content = content.replace('\r\n', '\n')
 | |
| 			content = "\n".join(list(set(content.split('\n'))))
 | |
| 
 | |
| 			item.write(content.strip())
 | |
| 			SideBarGit().status('Ignored file "'+ignore_entry+'" on '+item.path())
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| # Following code for selected folders. Dirname for when a file is selected.
 | |
| 
 | |
| class SideBarGitInitCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git', 'init']
 | |
| 			object.to_status_bar = True
 | |
| 			SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitCloneCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		failed = False
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Enter URL to clone: ', sublime.get_clipboard(), self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = ['git', 'clone', '--recursive', content.encode(sys.getfilesystemencoding())]
 | |
| 				object.to_status_bar = True
 | |
| 				if not SideBarGit().run(object, True):
 | |
| 					failed = True
 | |
| 			if not failed:
 | |
| 				SideBarGit().status('Cloned URL "'+content+'"')
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitGuiCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['git','gui']
 | |
| 			SideBarGit().run(object, False, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitGitkCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False):
 | |
| 		for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
 | |
| 			object = Object()
 | |
| 			object.item = item
 | |
| 			object.command = ['gitk']
 | |
| 			SideBarGit().run(object, False, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| # Following code for unique selected repos found on items selected
 | |
| 
 | |
| class SideBarGitCheckoutRepositoryToCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		failed = False
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Checkout repository to object: ', '', self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = item.repository
 | |
| 				object.command = ['git', 'checkout', content.encode(sys.getfilesystemencoding())]
 | |
| 				if not SideBarGit().run(object):
 | |
| 					failed = True
 | |
| 			if not failed:
 | |
| 				SideBarGit().status('Checkout repository to "'+content+'"')
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitPushCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			object = Object()
 | |
| 			object.item = item.repository
 | |
| 			object.command = ['git','push']
 | |
| 			object.to_status_bar = True
 | |
| 			SideBarGit().run(object, modal = False, background=False)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitPushWithOptionsCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Push with options: ', "git push aRemoteName aLocalBranch:aRemoteBranch", self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = item.repository
 | |
| 				object.command = content.encode(sys.getfilesystemencoding()).split(' ')
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitPushAndPushTagsCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			object = Object()
 | |
| 			object.item = item.repository
 | |
| 			object.command = ['git','push','&&','git','push','--tags']
 | |
| 			object.to_status_bar = True
 | |
| 			SideBarGit().run(object, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitPushAllBranchesCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			object = Object()
 | |
| 			object.item = item.repository
 | |
| 			object.command = ['git','push','origin','*:*']
 | |
| 			object.to_status_bar = True
 | |
| 			SideBarGit().run(object, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitPushTagsCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			object = Object()
 | |
| 			object.item = item.repository
 | |
| 			object.command = ['git','push','--tags']
 | |
| 			object.to_status_bar = True
 | |
| 			SideBarGit().run(object, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitPullCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Pull from default? ', self.run, paths)
 | |
| 		else:
 | |
| 			for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = item.repository
 | |
| 				object.command = ['git','pull']
 | |
| 				SideBarGit().run(object, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitPullWithOptionsCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Pull with options: ', "git pull", self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = item.repository
 | |
| 				object.command = content.encode(sys.getfilesystemencoding()).split(' ')
 | |
| 				SideBarGit().run(object, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitFetchCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Fetch from default? ', self.run, paths)
 | |
| 		else:
 | |
| 			for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = item.repository
 | |
| 				object.command = ['git','fetch']
 | |
| 				SideBarGit().run(object, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitFetchWithOptionsCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Fetch with options: ', "git fetch aRemoteName aRemoteBranch:aLocalBranch", self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = item.repository
 | |
| 				object.command = content.encode(sys.getfilesystemencoding()).split(' ')
 | |
| 				SideBarGit().run(object, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitCommitUndoCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Undo Commit? ', self.run, paths)
 | |
| 		else:
 | |
| 			for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = item.repository
 | |
| 				object.command = ['git', 'reset', '--soft', 'HEAD^']
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| # Following code for files and folders for each unique selected repos
 | |
| 
 | |
| class SideBarGitCommitCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Enter a commit message: ', '', self.run, paths)
 | |
| 			sublime.active_window().run_command('toggle_setting', {"setting": "spell_check"})
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			content = (content[0].upper() + content[1:]).encode(sys.getfilesystemencoding())
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				commitCommand = ['git', 'commit', '-m', content, '--']
 | |
| 				for item in repo.items:
 | |
| 					commitCommand.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.to_status_bar = True
 | |
| 				object.command = commitCommand
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitCommitAllCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Enter a commit message: ', '', self.run, paths)
 | |
| 			sublime.active_window().run_command('toggle_setting', {"setting": "spell_check"})
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			content = (content[0].upper() + content[1:]).encode(sys.getfilesystemencoding())
 | |
| 			for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = item.repository
 | |
| 				object.to_status_bar = True
 | |
| 				object.command = ['git', 'commit', '-a', '-m', content]
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitCommitAmendCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			commitCommand = ['git', 'commit', '--amend', '-C', 'HEAD', '--']
 | |
| 			for item in repo.items:
 | |
| 				commitCommand.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
 | |
| 			object = Object()
 | |
| 			object.item = repo.repository
 | |
| 			object.to_status_bar = True
 | |
| 			object.command = commitCommand
 | |
| 			SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitAddCommitCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Enter a commit message: ', '', self.run, paths)
 | |
| 			sublime.active_window().run_command('toggle_setting', {"setting": "spell_check"})
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			content = (content[0].upper() + content[1:]).encode(sys.getfilesystemencoding())
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				commitCommandAdd = ['git', 'add', '--']
 | |
| 				commitCommandCommit = ['git', 'commit', '-m', content, '--']
 | |
| 				for item in repo.items:
 | |
| 					commitCommandAdd.append(item.forCwdSystemPathRelativeFromRecursive(repo.repository.path()))
 | |
| 					commitCommandCommit.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = commitCommandAdd
 | |
| 				SideBarGit().run(object)
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.to_status_bar = True
 | |
| 				object.command = commitCommandCommit
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitAddCommitPushCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Enter a commit message: ', '', self.run, paths)
 | |
| 			sublime.active_window().run_command('toggle_setting', {"setting": "spell_check"})
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			content = (content[0].upper() + content[1:]).encode(sys.getfilesystemencoding())
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				commitCommandAdd = ['git', 'add', '--']
 | |
| 				commitCommandCommit = ['git', 'commit', '-m', content, '--']
 | |
| 				for item in repo.items:
 | |
| 					commitCommandAdd.append(item.forCwdSystemPathRelativeFromRecursive(repo.repository.path()))
 | |
| 					commitCommandCommit.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = commitCommandAdd
 | |
| 				SideBarGit().run(object)
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.to_status_bar = True
 | |
| 				object.command = commitCommandCommit
 | |
| 				SideBarGit().run(object)
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = ['git','push']
 | |
| 				SideBarGit().run(object, True)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitAddCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			command = ['git', 'add', '--']
 | |
| 			for item in repo.items:
 | |
| 				command.append(item.forCwdSystemPathRelativeFromRecursive(repo.repository.path()))
 | |
| 			object = Object()
 | |
| 			object.item = repo.repository
 | |
| 			object.command = command
 | |
| 			SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitRemoveKeepLocalCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Remove from repository, keep local copies? ', self.run, paths)
 | |
| 		else:
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				command = ['git', 'rm', '-r', '--cached', '--']
 | |
| 				for item in repo.items:
 | |
| 					command.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = command
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitRemoveCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], confirm = False, drop_me = ''):
 | |
| 		if confirm == False:
 | |
| 			SideBarGit().confirm('Remove from repository, and remove local copies? ', self.run, paths)
 | |
| 		else:
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				command = ['git', 'rm', '-r', '-f', '--']
 | |
| 				for item in repo.items:
 | |
| 					command.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = command
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitLiberalCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('[SideBarGit@SublimeText ./]:', 'git ', self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
 | |
| 				object = Object()
 | |
| 				object.item = item
 | |
| 				object.command = content.encode(sys.getfilesystemencoding()).split(' ')
 | |
| 				object.title = content
 | |
| 				object.no_results = 'No output'
 | |
| 				object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitRemoteAddCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('Remote add: ', "git remote add aRemoteName "+sublime.get_clipboard(), self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			content = content.encode(sys.getfilesystemencoding())
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = content.split(' ')
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitBranchNewFromCurrentCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('New branch: ', "", self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			content = content.encode(sys.getfilesystemencoding())
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = ['git', 'checkout', '-b', content]
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitBranchNewFromMasterCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('New branch: ', "", self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			content = content.encode(sys.getfilesystemencoding())
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = ['git', 'checkout', 'master']
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = ['git', 'checkout', '-b', content]
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitBranchNewFromCleanCurrentCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('New branch: ', "", self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			content = content.encode(sys.getfilesystemencoding())
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = ['git', 'checkout', '-B', content]
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitBranchNewFromCleanMasterCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = [], input = False, content = ''):
 | |
| 		if input == False:
 | |
| 			SideBarGit().prompt('New branch: ', "", self.run, paths)
 | |
| 		elif content != '':
 | |
| 			import sys
 | |
| 			content = content.encode(sys.getfilesystemencoding())
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = ['git', 'checkout', 'master']
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = ['git', 'checkout', '-B', content]
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitBranchSwitchToMasterCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 			for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 				object = Object()
 | |
| 				object.item = repo.repository
 | |
| 				object.command = ['git', 'checkout', 'master']
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitBranchSwitchToCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			object = Object()
 | |
| 			object.item = repo.repository
 | |
| 			object.command = ['git', 'branch', '-v']
 | |
| 			object.silent = True
 | |
| 			SideBarGit().run(object)
 | |
| 			SideBarGit().quickPanel(self.on_done, repo.repository, (SideBarGit.last_stdout.decode('utf-8')).split('\n'))
 | |
| 
 | |
| 	def on_done(self, extra, data, result):
 | |
| 			result = data[result].strip()
 | |
| 			if result.startswith("*"):
 | |
| 				return
 | |
| 			else:
 | |
| 				import sys
 | |
| 				branch = result.split(' ')[0]
 | |
| 				object = Object()
 | |
| 				object.item = extra
 | |
| 				object.command = ['git', 'checkout', branch.encode(sys.getfilesystemencoding())]
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitBranchDeleteCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			object = Object()
 | |
| 			object.item = repo.repository
 | |
| 			object.command = ['git', 'branch', '-v']
 | |
| 			object.silent = True
 | |
| 			SideBarGit().run(object)
 | |
| 			SideBarGit().quickPanel(self.on_done, repo.repository, (SideBarGit.last_stdout.decode('utf-8')).split('\n'))
 | |
| 
 | |
| 	def on_done(self, extra, data, result):
 | |
| 			result = data[result].strip()
 | |
| 			if result.startswith("*"):
 | |
| 				return
 | |
| 			else:
 | |
| 				import sys
 | |
| 				branch = result.split(' ')[0]
 | |
| 				object = Object()
 | |
| 				object.item = extra
 | |
| 				object.command = ['git', 'branch', '-d', branch.encode(sys.getfilesystemencoding())]
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitBranchDeleteForceCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			object = Object()
 | |
| 			object.item = repo.repository
 | |
| 			object.command = ['git', 'branch', '-v']
 | |
| 			object.silent = True
 | |
| 			SideBarGit().run(object)
 | |
| 			SideBarGit().quickPanel(self.on_done, repo.repository, (SideBarGit.last_stdout.decode('utf-8')).split('\n'))
 | |
| 
 | |
| 	def on_done(self, extra, data, result):
 | |
| 			result = data[result].strip()
 | |
| 			if result.startswith("*"):
 | |
| 				return
 | |
| 			else:
 | |
| 				import sys
 | |
| 				branch = result.split(' ')[0]
 | |
| 				object = Object()
 | |
| 				object.item = extra
 | |
| 				object.command = ['git', 'branch', '-D', branch.encode(sys.getfilesystemencoding())]
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitMergeToCurrentFromCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			object = Object()
 | |
| 			object.item = repo.repository
 | |
| 			object.command = ['git', 'branch', '-v']
 | |
| 			object.silent = True
 | |
| 			SideBarGit().run(object)
 | |
| 			SideBarGit().quickPanel(self.on_done, repo.repository, (SideBarGit.last_stdout.decode('utf-8')).split('\n'))
 | |
| 
 | |
| 	def on_done(self, extra, data, result):
 | |
| 			result = data[result].strip()
 | |
| 			if result.startswith("*"):
 | |
| 				return
 | |
| 			else:
 | |
| 				import sys
 | |
| 				branch = result.split(' ')[0]
 | |
| 				object = Object()
 | |
| 				object.item = extra
 | |
| 				object.command = ['git', 'merge', branch.encode(sys.getfilesystemencoding())]
 | |
| 				object.to_status_bar = True
 | |
| 				SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
| class SideBarGitRebaseCurrentIntoMasterCommand(sublime_plugin.WindowCommand):
 | |
| 	def run(self, paths = []):
 | |
| 		for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
 | |
| 			object = Object()
 | |
| 			object.item = repo.repository
 | |
| 			object.command = ['git', 'rebase', 'master']
 | |
| 			SideBarGit().run(object)
 | |
| 
 | |
| 	def is_enabled(self, paths = []):
 | |
| 		return SideBarSelection(paths).len() > 0
 | |
| 
 | |
|  #  }
 | |
|  #  this.tagAdd = function(event)
 | |
|  #  {
 | |
| 	# var aMsg = this.s.prompt('Enter tag name to add…', '');
 | |
| 	# if(aMsg != '')
 | |
| 	# {
 | |
| 	#   var repos = this.getSelectedRepos(event);
 | |
| 	#   var commands = '';
 | |
| 	#   for(var id in repos.r)
 | |
| 	#   {
 | |
| 	# 	commands += 'cd '+repos.r[id].cwd+'';
 | |
| 	# 	commands += '\n';
 | |
| 	# 	commands += 'git tag "'+this.s.filePathEscape(aMsg)+'" >>'+repos.obj.output+' 2>&1';
 | |
| 	# 	commands += '\n';
 | |
| 	#   }
 | |
| 	#   this.s.fileWrite(repos.obj.sh, commands);
 | |
| 	#   this.run(repos.obj.sh, repos.obj.outputFile, 'Tag "'+aMsg+'" added', false, true);
 | |
| 	# }
 | |
|  #  }
 | |
|  #  this.tagRemove = function(event)
 | |
|  #  {
 | |
| 	# var aMsg = this.s.prompt('Enter tag name to remove…', '');
 | |
| 	# if(aMsg != '')
 | |
| 	# {
 | |
| 	#   var repos = this.getSelectedRepos(event);
 | |
| 	#   var commands = '';
 | |
| 	#   for(var id in repos.r)
 | |
| 	#   {
 | |
| 	# 	commands += 'cd '+repos.r[id].cwd+'';
 | |
| 	# 	commands += '\n';
 | |
| 	# 	commands += 'git tag -d "'+this.s.filePathEscape(aMsg)+'" >>'+repos.obj.output+' 2>&1';
 | |
| 	# 	commands += '\n';
 | |
| 	#   }
 | |
| 	#   this.s.fileWrite(repos.obj.sh, commands);
 | |
| 	#   this.run(repos.obj.sh, repos.obj.outputFile, '', false, true);
 | |
| 	# }
 | |
|  #  }
 | |
|  #  this.tagAuto = function(event)
 | |
|  #  {
 | |
| 	# var repos = this.getSelectedRepos(event);
 | |
| 	# var commands = '';
 | |
| 	# for(var id in repos.r)
 | |
| 	# {
 | |
| 	#   var version = this.repositoryPreference(id, 'version') || 0;
 | |
| 	# 	  version++;
 | |
| 	#   this.repositoryPreference(id, 'version', version);
 | |
| 
 | |
| 	#   commands += 'cd '+repos.r[id].cwd+'';
 | |
| 	#   commands += '\n';
 | |
| 	#   commands += 'git tag "'+this.s.filePathEscape(this.s.now().replace(/-/g, '').substr(2, 6)+'.'+version)+'" >>'+repos.obj.output+' 2>&1';
 | |
| 	#   commands += '\n';
 | |
| 	# }
 | |
| 	# this.s.fileWrite(repos.obj.sh, commands);
 | |
| 	# this.run(repos.obj.sh, repos.obj.outputFile, 'Tag '+this.s.now().replace(/-/g, '').substr(2, 6)+' added', false, true);
 | |
|  #  }
 | |
|  #  this.tagList = function(event)
 | |
|  #  {
 | |
| 	# var repos = this.getSelectedRepos(event);
 | |
| 	# var commands = '';
 | |
| 	# for(var id in repos.r)
 | |
| 	# {
 | |
| 	#   commands += 'cd '+repos.r[id].cwd+'';
 | |
| 	#   commands += '\n';
 | |
| 	#   commands += 'git tag -l >>'+repos.obj.output+' 2>&1';
 | |
| 	#   commands += '\n';
 | |
| 	# }
 | |
| 	# this.s.fileWrite(repos.obj.sh, commands);
 | |
| 	# this.run(repos.obj.sh, repos.obj.outputFile, '', true, false);
 | |
|  #  }
 | |
|  #  this.tagsGetFromRepo = function(aObj)
 | |
|  #  {
 | |
| 	# var sh = this.s.fileCreateTemporal('kGit.sh', '');
 | |
| 
 | |
| 	# this.s.fileWrite(sh, 'cd '+aObj.cwd+' \n echo `git for-each-ref refs/tags --sort=-authordate` \n');
 | |
| 
 | |
| 	# var tags = this.run(sh, sh+'.diff', '', false, false, true).split('\n');
 | |
| 	# 	tags.shift();
 | |
| 	# 	tags.shift();
 | |
| 	# 	tags.shift();
 | |
| 	# 	tags.shift();
 | |
| 	# 	tags.shift();
 | |
| 	# 	tags = tags.join('');
 | |
| 	# 	tags = tags.split('refs/tags/');
 | |
| 	# 	tags.shift();
 | |
| 	# 	for(var id in tags)
 | |
| 	# 	  tags[id] = tags[id].split(' ')[0];
 | |
| 	# 	tags.reverse();
 | |
| 	# return tags;
 | |
|  #  }
 | |
| 
 | |
| 
 | |
| #  //TODO: hardcoded branch name
 | |
| 
 | |
|  #  }
 | |
|  #  this.diffBetweenLatestTagAndLastCommit = function(event)
 | |
|  #  {
 | |
| 	# var selected = this.getSelectedPaths(event);
 | |
| 	# for(var id in selected)
 | |
| 	# {
 | |
| 	#   var obj = this.getPaths(selected[id]);
 | |
| 	#   var tags = this.tagsGetFromRepo(obj);
 | |
| 	#   this.s.fileWrite(obj.sh, 'cd '+obj.cwd+'\ngit diff "'+(tags.pop() || '')+'"... -- '+obj.selected+' >>'+obj.output+' 2>&1\n');
 | |
| 	#   this.run(obj.sh, obj.outputFile, 'No difference found', true);
 | |
| 	# }
 | |
|  #  }
 | |
|  #  this.diffBetweenTheTwoLatestTags = function(event)
 | |
|  #  {
 | |
| 	# var selected = this.getSelectedPaths(event);
 | |
| 	# for(var id in selected)
 | |
| 	# {
 | |
| 	#   var obj = this.getPaths(selected[id]);
 | |
| 	#   var tags = this.tagsGetFromRepo(obj);
 | |
| 	#   this.s.fileWrite(obj.sh, 'cd '+obj.cwd+'\ngit diff "'+(tags[tags.length-2] || '')+'".."'+(tags[tags.length-1] || '')+'" -- '+obj.selected+' >>'+obj.output+' 2>&1\n');
 | |
| 	#   this.run(obj.sh, obj.outputFile, 'No difference found', true);
 | |
| 	# }
 | |
|  #  }
 | |
|  #  this.logSinceLatestTag = function(event)
 | |
|  #  {
 | |
| 	# var selected = this.getSelectedPaths(event);
 | |
| 	# for(var id in selected)
 | |
| 	# {
 | |
| 	#   var obj = this.getPaths(selected[id]);
 | |
| 	#   var tags = this.tagsGetFromRepo(obj);
 | |
| 	#   this.s.fileWrite(obj.sh, 'cd '+obj.cwd+'\n echo "log:'+this.s.filePathEscape(this.s.pathToNix(obj.selectedFile))+'" >> '+obj.output+' \n git log "'+(tags.pop() || '')+'"... --stat --graph -- '+obj.selected+' >>'+obj.output+' 2>&1\n');
 | |
| 	#   this.run(obj.sh, obj.outputFile, 'No log to show', true);
 | |
| 	# }
 | |
| 
 | |
|  #  this.logBetweenTheTwoLatestTags = function(event)
 | |
|  #  {
 | |
| 	# var selected = this.getSelectedPaths(event);
 | |
| 	# for(var id in selected)
 | |
| 	# {
 | |
| 	#   var obj = this.getPaths(selected[id]);
 | |
| 	#   var tags = this.tagsGetFromRepo(obj);
 | |
| 	#   this.s.fileWrite(obj.sh, 'cd '+obj.cwd+' echo "log:'+this.s.filePathEscape(this.s.pathToNix(obj.selectedFile))+'" >> '+obj.output+' \n git log "'+(tags[tags.length-2] || '')+'".."'+(tags[tags.length-1] || '')+'" --stat --graph -- '+obj.selected+' >>'+obj.output+' 2>&1\n');
 | |
| 	#   this.run(obj.sh, obj.outputFile, 'No log to show', true);
 | |
| 	# }
 | |
|  #  } |