Files
atom/src/app/git.coffee
Kevin Sawicki 5cd3c04702 Load fuzzy finder paths in web worker at startup
Previously the paths were first loaded when the fuzzy finder
view was first attached.

Now a web worker is started when the package activates that
sets the paths on the fuzzy finder view the first time it
displays if the worker has completed by the time an event occurs
that displays the view.
2013-02-02 12:47:46 -08:00

105 lines
2.7 KiB
CoffeeScript

_ = require 'underscore'
Subscriber = require 'subscriber'
GitRepository = require 'git-repository'
module.exports =
class Git
@open: (path, options) ->
try
new Git(path, options)
catch e
null
statusFlags:
index_new: 1 << 0
index_modified: 1 << 1
index_deleted: 1 << 2
index_renamed: 1 << 3
index_typechange: 1 << 4
working_dir_new: 1 << 7
working_dir_modified: 1 << 8
working_dir_delete: 1 << 9
working_dir_typechange: 1 << 10
ignore: 1 << 14
constructor: (path, options={}) ->
@repo = new GitRepository(path)
refreshIndexOnFocus = options.refreshIndexOnFocus ? true
if refreshIndexOnFocus
$ = require 'jquery'
@subscribe $(window), 'focus', => @refreshIndex()
getRepo: ->
unless @repo?
throw new Error("Repository has been destroyed")
@repo
refreshIndex: -> @getRepo().refreshIndex()
getPath: -> @getRepo().getPath()
destroy: ->
@getRepo().destroy()
@repo = null
@unsubscribe()
getWorkingDirectory: ->
repoPath = @getPath()
repoPath?.substring(0, repoPath.length - 6)
getHead: ->
@getRepo().getHead() or ''
getPathStatus: (path) ->
pathStatus = @getRepo().getStatus(@relativize(path))
isPathIgnored: (path) ->
@getRepo().isIgnored(@relativize(path))
isStatusModified: (status) ->
modifiedFlags = @statusFlags.working_dir_modified |
@statusFlags.working_dir_delete |
@statusFlags.working_dir_typechange |
@statusFlags.index_modified |
@statusFlags.index_deleted |
@statusFlags.index_typechange
(status & modifiedFlags) > 0
isPathModified: (path) ->
@isStatusModified(@getPathStatus(path))
isStatusNew: (status) ->
newFlags = @statusFlags.working_dir_new |
@statusFlags.index_new
(status & newFlags) > 0
isPathNew: (path) ->
@isStatusNew(@getPathStatus(path))
relativize: (path) ->
workingDirectory = @getWorkingDirectory()
if workingDirectory and path.indexOf("#{workingDirectory}/") is 0
path.substring(workingDirectory.length + 1)
else
path
getShortHead: ->
head = @getHead()
return head.substring(11) if head.indexOf('refs/heads/') is 0
return head.substring(10) if head.indexOf('refs/tags/') is 0
return head.substring(13) if head.indexOf('refs/remotes/') is 0
return head.substring(0, 7) if head.match(/[a-fA-F0-9]{40}/)
return head
checkoutHead: (path) ->
@getRepo().checkoutHead(@relativize(path))
getDiffStats: (path) ->
@getRepo().getDiffStats(@relativize(path)) or added: 0, deleted: 0
isSubmodule: (path) ->
@getRepo().isSubmodule(@relativize(path))
_.extend Git.prototype, Subscriber