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 }