1 /* 2 * Copyright (C) the libgit2 contributors. All rights reserved. 3 * 4 * This file is part of libgit2, distributed under the GNU GPL v2 with 5 * a Linking Exception. For full terms see the included COPYING file. 6 */ 7 module libgit2_d.revparse; 8 9 10 private static import libgit2_d.types; 11 12 /** 13 * @file git2/revparse.h 14 * @brief Git revision parsing routines 15 * @defgroup git_revparse Git revision parsing routines 16 * @ingroup Git 17 * @{ 18 */ 19 extern (C): 20 nothrow @nogc: 21 public: 22 23 /** 24 * Find a single object, as specified by a revision string. 25 * 26 * See `man gitrevisions`, or 27 * http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for 28 * information on the syntax accepted. 29 * 30 * The returned object should be released with `git_object_free` when no 31 * longer needed. 32 * 33 * Params: 34 * out_ = pointer to output object 35 * repo = the repository to search in 36 * spec = the textual specification for an object 37 * 38 * Returns: 0 on success, git_error_code.GIT_ENOTFOUND, git_error_code.GIT_EAMBIGUOUS, git_error_code.GIT_EINVALIDSPEC or an error code 39 */ 40 //GIT_EXTERN 41 int git_revparse_single(libgit2_d.types.git_object** out_, libgit2_d.types.git_repository* repo, const (char)* spec); 42 43 /** 44 * Find a single object and intermediate reference by a revision string. 45 * 46 * See `man gitrevisions`, or 47 * http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for 48 * information on the syntax accepted. 49 * 50 * In some cases (`@{<-n>}` or `<branchname>@{upstream}`), the expression may 51 * point to an intermediate reference. When such expressions are being passed 52 * in, `reference_out` will be valued as well. 53 * 54 * The returned object should be released with `git_object_free` and the 55 * returned reference with `git_reference_free` when no longer needed. 56 * 57 * Params: 58 * object_out = pointer to output object 59 * reference_out = pointer to output reference or null 60 * repo = the repository to search in 61 * spec = the textual specification for an object 62 * 63 * Returns: 0 on success, git_error_code.GIT_ENOTFOUND, git_error_code.GIT_EAMBIGUOUS, git_error_code.GIT_EINVALIDSPEC or an error code 64 */ 65 //GIT_EXTERN 66 int git_revparse_ext(libgit2_d.types.git_object** object_out, libgit2_d.types.git_reference** reference_out, libgit2_d.types.git_repository* repo, const (char)* spec); 67 68 /** 69 * Revparse flags. These indicate the intended behavior of the spec passed to 70 * git_revparse. 71 */ 72 enum git_revparse_mode_t 73 { 74 /** 75 * The spec targeted a single object. 76 */ 77 GIT_REVPARSE_SINGLE = 1 << 0, 78 79 /** 80 * The spec targeted a range of commits. 81 */ 82 GIT_REVPARSE_RANGE = 1 << 1, 83 84 /** 85 * The spec used the '...' operator, which invokes special semantics. 86 */ 87 GIT_REVPARSE_MERGE_BASE = 1 << 2, 88 } 89 90 /** 91 * Git Revision Spec: output of a `git_revparse` operation 92 */ 93 struct git_revspec 94 { 95 /** 96 * The left element of the revspec; must be freed by the user 97 */ 98 libgit2_d.types.git_object* from; 99 100 /** 101 * The right element of the revspec; must be freed by the user 102 */ 103 libgit2_d.types.git_object* to; 104 105 /** 106 * The intent of the revspec (i.e. `git_revparse_mode_t` flags) 107 */ 108 uint flags; 109 } 110 111 /** 112 * Parse a revision string for `from`, `to`, and intent. 113 * 114 * See `man gitrevisions` or 115 * http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for 116 * information on the syntax accepted. 117 * 118 * Params: 119 * revspec = Pointer to an user-allocated git_revspec struct where the result of the rev-parse will be stored 120 * repo = the repository to search in 121 * spec = the rev-parse spec to parse 122 * 123 * Returns: 0 on success, GIT_INVALIDSPEC, git_error_code.GIT_ENOTFOUND, git_error_code.GIT_EAMBIGUOUS or an error code 124 */ 125 //GIT_EXTERN 126 int git_revparse(.git_revspec* revspec, libgit2_d.types.git_repository* repo, const (char)* spec); 127 128 /** @} */