1 /* 2 * Copyright Sönke Ludwig 2014. 3 * Distributed under the Boost Software License, Version 1.0. 4 * (See accompanying file LICENSE_1_0.txt or copy at 5 * http://www.boost.org/LICENSE_1_0.txt) 6 */ 7 module git.revparse; 8 9 import git.commit; 10 import git.object_; 11 import git.oid; 12 import git.reference; 13 import git.repository; 14 import git.types; 15 import git.util; 16 import git.version_; 17 18 import deimos.git2.revparse; 19 import deimos.git2.errors; 20 import deimos.git2.types; 21 22 import std.conv : to; 23 import std.string : toStringz; 24 import std.typecons : Tuple, tuple; 25 26 27 GitObject revparseSingle(GitRepo repo, string spec) 28 { 29 git_object* ret; 30 require(git_revparse_single(&ret, repo.cHandle, spec.toStringz) == 0); 31 return GitObject(repo, ret); 32 } 33 34 Tuple!(GitObject, GitReference) revparseExt(GitRepo repo, string spec) 35 { 36 git_object* obj; 37 git_reference* ref_; 38 require(git_revparse_ext(&obj, &ref_, repo.cHandle, spec.toStringz) == 0); 39 return tuple(GitObject(repo, obj), GitReference(repo, ref_)); 40 } 41 42 GitRevSpec revparse(GitRepo repo, string spec) 43 { 44 git_revspec dst; 45 require(git_revparse(&dst, repo.cHandle, spec.toStringz) == 0); 46 return GitRevSpec(repo, dst); 47 } 48 49 struct GitRevSpec { 50 package this(GitRepo repo, git_revspec spec) 51 { 52 from = GitObject(repo, spec.from); 53 to = GitObject(repo, spec.to); 54 flags = cast(GitRevparseModeFlags)spec.flags; 55 } 56 57 GitObject from; 58 GitObject to; 59 GitRevparseModeFlags flags; 60 } 61 62 enum GitRevparseModeFlags { 63 single = GIT_REVPARSE_SINGLE, 64 range = GIT_REVPARSE_RANGE, 65 mergeBase = GIT_REVPARSE_MERGE_BASE 66 }