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.signature; 8 9 import git.commit; 10 import git.oid; 11 import git.repository; 12 import git.tag; 13 import git.types; 14 import git.util; 15 import git.version_; 16 17 import deimos.git2.signature; 18 import deimos.git2.types; 19 20 import std.conv : to; 21 import std.datetime; 22 import std.string : toStringz; 23 24 static if (targetLibGitVersion >= VersionInfo(0, 20, 0)) { 25 GitSignature createDefaultSignature(GitRepo repo) 26 { 27 git_signature* ret; 28 require(git_signature_default(&ret, repo.cHandle) == 0); 29 return GitSignature(ret); 30 } 31 } 32 33 GitSignature createSignature(string name, string email, SysTime time) 34 { 35 git_signature* ret; 36 auto gittime = toGitTime(time); 37 require(git_signature_new(&ret, name.toStringz, email.toStringz, gittime.time, gittime.offset) == 0); 38 return GitSignature(ret); 39 } 40 41 GitSignature createSignature(string name, string email) 42 { 43 git_signature* ret; 44 require(git_signature_now(&ret, name.toStringz, email.toStringz) == 0); 45 return GitSignature(ret); 46 } 47 48 struct GitSignature { 49 package this(git_signature* sig) 50 { 51 _commit = GitCommit.init; 52 _tag = GitTag.init; 53 _data = Data(sig); 54 } 55 56 package this(GitCommit owner, const(git_signature)* sig) 57 { 58 _commit = owner; 59 _tag = GitTag.init; 60 _sig = sig; 61 } 62 63 package this(GitTag owner, const(git_signature)* sig) 64 { 65 _commit = GitCommit.init; 66 _tag = owner; 67 _sig = sig; 68 } 69 70 @property SysTime time() const { return _sig.when.toSysTime(); } 71 @property string name() const { return _sig.name.to!string; } 72 @property string email() const { return _sig.email.to!string; } 73 @property GitSignature dup() { return GitSignature(git_signature_dup(this.cHandle)); } 74 75 package const(git_signature)* cHandle() const { return _sig ? _sig : _data._payload; } 76 77 mixin RefCountedGitObject!(git_signature, git_signature_free, false); 78 79 private: 80 // Reference to the parent commit to keep it alive. 81 GitCommit _commit; 82 GitTag _tag; 83 const(git_signature)* _sig; 84 }