File: Stats.xs

package info (click to toggle)
libgit-raw-perl 0.87%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,464 kB
  • sloc: perl: 5,404; ansic: 182; makefile: 6
file content (75 lines) | stat: -rw-r--r-- 1,363 bytes parent folder | download | duplicates (3)
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
MODULE = Git::Raw			PACKAGE = Git::Raw::Diff::Stats

SV *
deletions(self)
	Diff_Stats self

	CODE:
		RETVAL = newSVuv(git_diff_stats_deletions(self));

	OUTPUT: RETVAL

SV *
insertions(self)
	Diff_Stats self

	CODE:
		RETVAL = newSVuv(git_diff_stats_insertions(self));

	OUTPUT: RETVAL

SV *
files_changed(self)
	Diff_Stats self

	CODE:
		RETVAL = newSVuv(git_diff_stats_files_changed(self));

	OUTPUT: RETVAL

SV *
buffer(self, ...)
	Diff_Stats self

	PROTOTYPE: $;$
	PREINIT:
		int rc;
		size_t width = 0;

		git_buf buf = GIT_BUF_INIT_CONST(NULL, 0);

		git_diff_stats_format_t format = GIT_DIFF_STATS_NONE;

	CODE:
		if (items == 2) {
			HV *opts = git_ensure_hv(ST(1), "options");
			HV *flags;

			if ((flags = git_hv_hash_entry(opts, "flags"))) {
				unsigned out = 0;

				git_flag_opt(flags, "full", GIT_DIFF_STATS_FULL, &out);
				git_flag_opt(flags, "short", GIT_DIFF_STATS_SHORT, &out);
				git_flag_opt(flags, "number", GIT_DIFF_STATS_NUMBER, &out);
				git_flag_opt(flags, "summary", GIT_DIFF_STATS_INCLUDE_SUMMARY, &out);

				format = out;
			}
		}

		rc = git_diff_stats_to_buf(&buf, self, format, width);
		git_check_error(rc);

		RETVAL = newSVpv(buf.ptr, buf.size);

		git_buf_dispose(&buf);

	OUTPUT: RETVAL

void
DESTROY(self)
	SV *self

	CODE:
		git_diff_stats_free(GIT_SV_TO_PTR(Diff::Stats, self));
		SvREFCNT_dec(GIT_SV_TO_MAGIC(self));