FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
libgit2/examples/fetch.c at executable · novalis/libgit2 · GitHub
novalis
/
libgit2
Public
forked from
dturner-tw/libgit2
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
libgit2
/
examples
/
fetch.c
Copy path
More file actions
More file actions
Latest commit
History
History
History
109 lines (93 loc) · 3.15 KB
Breadcrumbs
libgit2
/
examples
/
fetch.c
Copy path
File metadata and controls
109 lines (93 loc) · 3.15 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
102
103
104
105
106
107
108
109
#include
"common.h"
static
int
progress_cb
(
const
char
*
str
,
int
len
,
void
*
data
)
{
(
void
)
data
;
printf
(
"remote: %.*s"
,
len
,
str
);
fflush
(
stdout
);
/* We don't have the \n to force the flush */
return
0
;
}
/**
* This function gets called for each remote-tracking branch that gets
* updated. The message we output depends on whether it's a new one or
* an update.
*/
static
int
update_cb
(
const
char
*
refname
,
const
git_oid
*
a
,
const
git_oid
*
b
,
void
*
data
)
{
char
a_str
[
GIT_OID_HEXSZ
+
1
],
b_str
[
GIT_OID_HEXSZ
+
1
];
(
void
)
data
;
git_oid_fmt
(
b_str
,
b
);
b_str
[
GIT_OID_HEXSZ
]
=
'\0'
;
if
(
git_oid_is_zero
(
a
)) {
printf
(
"[new] %.20s %s\n"
,
b_str
,
refname
);
}
else
{
git_oid_fmt
(
a_str
,
a
);
a_str
[
GIT_OID_HEXSZ
]
=
'\0'
;
printf
(
"[updated] %.10s..%.10s %s\n"
,
a_str
,
b_str
,
refname
);
}
return
0
;
}
/**
* This gets called during the download and indexing. Here we show
* processed and total objects in the pack and the amount of received
* data. Most frontends will probably want to show a percentage and
* the download rate.
*/
static
int
transfer_progress_cb
(
const
git_indexer_progress
*
stats
,
void
*
payload
)
{
(
void
)
payload
;
if
(
stats
->
received_objects
==
stats
->
total_objects
) {
printf
(
"Resolving deltas %u/%u\r"
,
stats
->
indexed_deltas
,
stats
->
total_deltas
);
}
else
if
(
stats
->
total_objects
>
0
) {
printf
(
"Received %u/%u objects (%u) in %"
PRIuZ
" bytes\r"
,
stats
->
received_objects
,
stats
->
total_objects
,
stats
->
indexed_objects
,
stats
->
received_bytes
);
}
return
0
;
}
/** Entry point for this command */
int
lg2_fetch
(
git_repository
*
repo
,
int
argc
,
char
*
*
argv
)
{
git_remote
*
remote
=
NULL
;
const
git_indexer_progress
*
stats
;
git_fetch_options
fetch_opts
=
GIT_FETCH_OPTIONS_INIT
;
if
(
argc
<
2
) {
fprintf
(
stderr
,
"usage: %s fetch <repo>\n"
,
argv
[
-1
]);
return
EXIT_FAILURE
;
}
/* Figure out whether it's a named remote or a URL */
printf
(
"Fetching %s for repo %p\n"
,
argv
[
1
],
repo
);
if
(
git_remote_lookup
(
&
remote
,
repo
,
argv
[
1
])
<
0
)
if
(
git_remote_create_anonymous
(
&
remote
,
repo
,
argv
[
1
])
<
0
)
goto
on_error
;
/* Set up the callbacks (only update_tips for now) */
fetch_opts
.
callbacks
.
update_tips
=
&
update_cb
;
fetch_opts
.
callbacks
.
sideband_progress
=
&
progress_cb
;
fetch_opts
.
callbacks
.
transfer_progress
=
transfer_progress_cb
;
fetch_opts
.
callbacks
.
credentials
=
cred_acquire_cb
;
/**
* Perform the fetch with the configured refspecs from the
* config. Update the reflog for the updated references with
* "fetch".
*/
if
(
git_remote_fetch
(
remote
,
NULL
,
&
fetch_opts
,
"fetch"
)
<
0
)
goto
on_error
;
/**
* If there are local objects (we got a thin pack), then tell
* the user how many objects we saved from having to cross the
* network.
*/
stats
=
git_remote_stats
(
remote
);
if
(
stats
->
local_objects
>
0
) {
printf
(
"\rReceived %u/%u objects in %"
PRIuZ
" bytes (used %u local objects)\n"
,
stats
->
indexed_objects
,
stats
->
total_objects
,
stats
->
received_bytes
,
stats
->
local_objects
);
}
else
{
printf
(
"\rReceived %u/%u objects in %"
PRIuZ
"bytes\n"
,
stats
->
indexed_objects
,
stats
->
total_objects
,
stats
->
received_bytes
);
}
git_remote_free
(
remote
);
return
0
;
on_error
:
git_remote_free
(
remote
);
return
-1
;
}
Back
|
FazBrowse Home
|
New Git URL