Add Git.isModified(path)

This commit is contained in:
Corey Johnson 2012-11-02 13:24:38 -07:00
parent 999a74ec2c
commit 81fc8d417d
2 changed files with 54 additions and 4 deletions

View File

@ -6,7 +6,7 @@ describe "Git", ->
beforeEach ->
fs.remove('/tmp/.git') if fs.isDirectory('/tmp/.git')
describe "getPath()", ->
describe ".getPath()", ->
it "returns the repository path for a .git directory path", ->
repo = new Git(require.resolve('fixtures/git/master.git/HEAD'))
expect(repo.getPath()).toBe require.resolve('fixtures/git/master.git') + '/'
@ -15,7 +15,7 @@ describe "Git", ->
repo = new Git(require.resolve('fixtures/git/master.git'))
expect(repo.getPath()).toBe require.resolve('fixtures/git/master.git') + '/'
describe "getHead()", ->
describe ".getHead()", ->
it "returns null for a non-repository", ->
repo = new Git('/tmp/nogit.txt')
expect(repo.getHead()).toBeNull
@ -24,7 +24,7 @@ describe "Git", ->
repo = new Git(require.resolve('fixtures/git/master.git'))
expect(repo.getHead()).toBe 'refs/heads/master'
describe "getShortHead()", ->
describe ".getShortHead()", ->
it "returns null for a non-repository", ->
repo = new Git('/tmp/nogit.txt')
expect(repo.getShortHead()).toBeNull
@ -33,7 +33,7 @@ describe "Git", ->
repo = new Git(require.resolve('fixtures/git/master.git'))
expect(repo.getShortHead()).toBe 'master'
describe "isIgnored()", ->
describe ".isIgnored(path)", ->
it "returns true for an ignored path", ->
repo = new Git(require.resolve('fixtures/git/ignore.git'))
expect(repo.isIgnored('a.txt')).toBeTruthy()
@ -41,3 +41,32 @@ describe "Git", ->
it "returns false for a non-ignored path", ->
repo = new Git(require.resolve('fixtures/git/ignore.git'))
expect(repo.isIgnored('b.txt')).toBeFalsy()
describe ".isModified(path)", ->
[repo, path, originalPathText, newPath] = []
beforeEach ->
repo = new Git(require.resolve('fixtures/git/working-dir'))
path = require.resolve('fixtures/git/working-dir/file.txt')
originalPathText = fs.read(path)
newPath = fs.join(require.resolve('fixtures/git/working-dir'), 'new-path.txt')
fs.write(newPath, "i'm new here")
afterEach ->
fs.write(path, originalPathText)
fs.remove(newPath) if fs.exists(newPath)
describe "when the path is unstaged", ->
it "returns false if the path has not been modified", ->
expect(repo.isModified(path)).toBeFalsy()
it "returns true if the path is new", ->
expect(repo.isModified(newPath)).toBeTruthy()
it "returns true if the path is modified", ->
fs.write(path, "change")
expect(repo.isModified(path)).toBeTruthy()
it "returns true if the path is deleted", ->
fs.remove(path)
expect(repo.isModified(path)).toBeTruthy()

View File

@ -6,6 +6,18 @@ class Git
repo = new Git(path)
repo.isIgnored(repo.relativize(path))
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) ->
@repo = new GitRepository(path)
@ -22,6 +34,15 @@ class Git
isIgnored: (path) ->
path and @repo.isIgnored(path)
isModified: (path) ->
statusFlags = @repo.getStatus(@relativize(path))
modifiedFlags = @statusFlags.working_dir_new |
@statusFlags.working_dir_modified |
@statusFlags.working_dir_delete |
@statusFlags.working_dir_typechange
(statusFlags & modifiedFlags) > 0
relativize: (path) ->
return path unless path
workingDirectory = @getWorkingDirectory()