mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-21 07:58:04 +03:00
Add Git.checkoutHead(path)
This commit is contained in:
parent
67c1cfe3c6
commit
1019154db6
@ -6,6 +6,7 @@ var $git = {};
|
||||
native function getPath();
|
||||
native function getStatus(path);
|
||||
native function isIgnored(path);
|
||||
native function checkoutHead(path);
|
||||
|
||||
function GitRepository(path) {
|
||||
var repo = getRepository(path);
|
||||
@ -18,5 +19,6 @@ var $git = {};
|
||||
GitRepository.prototype.getPath = getPath;
|
||||
GitRepository.prototype.getStatus = getStatus;
|
||||
GitRepository.prototype.isIgnored = isIgnored;
|
||||
GitRepository.prototype.checkoutHead = checkoutHead;
|
||||
this.GitRepository = GitRepository;
|
||||
})();
|
||||
|
@ -74,6 +74,31 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
CefRefPtr<CefV8Value> CheckoutHead(const char *path) {
|
||||
if (!exists) {
|
||||
return CefV8Value::CreateBool(false);
|
||||
}
|
||||
|
||||
char *copiedPath = (char *)malloc(sizeof(char) * (strlen(path) + 1));
|
||||
strcpy(copiedPath, path);
|
||||
git_checkout_opts options;
|
||||
memset(&options, 0, sizeof(options));
|
||||
options.checkout_strategy = GIT_CHECKOUT_OVERWRITE_MODIFIED;
|
||||
git_strarray paths;
|
||||
paths.count = 1;
|
||||
paths.strings = &copiedPath;
|
||||
options.paths = paths;
|
||||
|
||||
int result = git_checkout_head(repo, &options);
|
||||
free(copiedPath);
|
||||
if (result == GIT_OK) {
|
||||
return CefV8Value::CreateBool(true);
|
||||
}
|
||||
else {
|
||||
return CefV8Value::CreateBool(false);
|
||||
}
|
||||
}
|
||||
|
||||
IMPLEMENT_REFCOUNTING(GitRepository);
|
||||
};
|
||||
|
||||
@ -119,6 +144,12 @@ bool Git::Execute(const CefString& name,
|
||||
return true;
|
||||
}
|
||||
|
||||
if (name == "checkoutHead") {
|
||||
GitRepository *userData = (GitRepository *)object->GetUserData().get();
|
||||
retval = userData->CheckoutHead(arguments[0]->GetStringValue().ToString().c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -88,3 +88,36 @@ describe "Git", ->
|
||||
|
||||
it "returns false if the path isn't new", ->
|
||||
expect(repo.isPathNew(path)).toBeFalsy()
|
||||
|
||||
describe ".checkoutHead(path)", ->
|
||||
[repo, path1, path2, originalPath1Text, originalPath2Text] = []
|
||||
|
||||
beforeEach ->
|
||||
repo = new Git(require.resolve('fixtures/git/working-dir'))
|
||||
path1 = require.resolve('fixtures/git/working-dir/file.txt')
|
||||
originalPath1Text = fs.read(path1)
|
||||
path2 = require.resolve('fixtures/git/working-dir/other.txt')
|
||||
originalPath2Text = fs.read(path2)
|
||||
|
||||
afterEach ->
|
||||
fs.write(path1, originalPath1Text)
|
||||
fs.write(path2, originalPath2Text)
|
||||
|
||||
it "no longer reports a path as modified after checkout", ->
|
||||
expect(repo.isPathModified(path1)).toBeFalsy()
|
||||
fs.write(path1, '')
|
||||
expect(repo.isPathModified(path1)).toBeTruthy()
|
||||
expect(repo.checkoutHead(path1)).toBeTruthy()
|
||||
expect(repo.isPathModified(path1)).toBeFalsy()
|
||||
|
||||
it "restores the contents of the path to the original text", ->
|
||||
fs.write(path1, '')
|
||||
expect(repo.checkoutHead(path1)).toBeTruthy()
|
||||
expect(fs.read(path1)).toBe(originalPath1Text)
|
||||
|
||||
it "only restores the path specified", ->
|
||||
fs.write(path2, 'path 2 is edited')
|
||||
expect(repo.isPathModified(path2)).toBeTruthy()
|
||||
expect(repo.checkoutHead(path1)).toBeTruthy()
|
||||
expect(fs.read(path2)).toBe('path 2 is edited')
|
||||
expect(repo.isPathModified(path2)).toBeTruthy()
|
||||
|
@ -55,3 +55,6 @@ class Git
|
||||
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) ->
|
||||
@repo.checkoutHead(@relativize(path))
|
||||
|
Loading…
Reference in New Issue
Block a user