-
Notifications
You must be signed in to change notification settings - Fork 3
/
Error.pm6
101 lines (94 loc) · 2.12 KB
/
Error.pm6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
use NativeCall;
enum Git::ErrorCode (
GIT_OK => 0,
GIT_ERROR => -1,
GIT_ENOTFOUND => -3,
GIT_EEXISTS => -4,
GIT_EAMBIGUOUS => -5,
GIT_EBUFS => -6,
GIT_EUSER => -7,
GIT_EBAREREPO => -8,
GIT_EUNBORNBRANCH => -9,
GIT_EUNMERGED => -10,
GIT_ENONFASTFORWARD => -11,
GIT_EINVALIDSPEC => -12,
GIT_ECONFLICT => -13,
GIT_ELOCKED => -14,
GIT_EMODIFIED => -15,
GIT_EAUTH => -16,
GIT_ECERTIFICATE => -17,
GIT_EAPPLIED => -18,
GIT_EPEEL => -19,
GIT_EEOF => -20,
GIT_EINVALID => -21,
GIT_EUNCOMMITTED => -22,
GIT_EDIRECTORY => -23,
GIT_EMERGECONFLICT => -24,
GIT_PASSTHROUGH => -30,
GIT_ITEROVER => -31,
);
enum Git::ErrorClass <
GITERR_NONE
GITERR_NOMEMORY
GITERR_OS
GITERR_INVALID
GITERR_REFERENCE
GITERR_ZLIB
GITERR_REPOSITORY
GITERR_CONFIG
GITERR_REGEX
GITERR_ODB
GITERR_INDEX
GITERR_OBJECT
GITERR_NET
GITERR_TAG
GITERR_TREE
GITERR_INDEXER
GITERR_SSL
GITERR_SUBMODULE
GITERR_THREAD
GITERR_STASH
GITERR_CHECKOUT
GITERR_FETCHHEAD
GITERR_MERGE
GITERR_SSH
GITERR_FILTER
GITERR_REVERT
GITERR_CALLBACK
GITERR_CHERRYPICK
GITERR_DESCRIBE
GITERR_REBASE
GITERR_FILESYSTEM
>;
class X::Git is Exception
{
has Git::ErrorCode $.code;
has Git::ErrorClass $.class;
has Str $.message;
class Git::Error is repr('CStruct')
{
has Str $.message;
has int32 $.klass;
}
sub giterr_last(--> Git::Error) is native('git2') {}
sub giterr_clear() is native('git2') {}
submethod TWEAK
{
my $err = giterr_last;
with $err
{
$!class = Git::ErrorClass(.klass);
$!message = .message;
}
else
{
$!message = ~$!code;
}
giterr_clear;
}
}
sub check(int32 $code) is export
{
die X::Git.new(code => Git::ErrorCode($code)) if $code < 0;
$code
}