Method: Rugged::Remote#fetch
- Defined in:
- ext/rugged/rugged_remote.c
#fetch(refspecs = nil, options = {}) ⇒ Hash
Downloads new data from the remote for the given refspecs and updates tips.
You can optionally pass in a single or multiple alternative refspecs to use instead of the fetch refspecs already configured for remote.
Returns a hash containing statistics for the fetch operation.
The following options can be passed in the options Hash:
- :credentials
-
The credentials to use for the fetch operation. Can be either an instance of one of the Rugged::Credentials types, or a proc returning one of the former. The proc will be called with the
url, theusernamefrom the url (if applicable) and a list of applicable credential types. - :headers
-
Extra HTTP headers to include with the request (only applies to http:// or https:// remotes)
- :progress
-
A callback that will be executed with the textual progress received from the remote. This is the text send over the progress side-band (ie. the “counting objects” output).
- :transfer_progress
-
A callback that will be executed to report clone progress information. It will be passed the amount of
total_objects,indexed_objects,received_objects,local_objects,total_deltas,indexed_deltasandreceived_bytes. - :update_tips
-
A callback that will be executed each time a reference is updated locally. It will be passed the
refname,old_oidandnew_oid. - :certificate_check
-
A callback that will be executed each time we validate a certificate using https. It will be passed the
valid,host_nameand the callback should return a true/false to indicate if the certificate has been validated. - :message
-
The message to insert into the reflogs. Defaults to “fetch”.
- :prune
-
Specifies the prune mode for the fetch.
trueremove any remote-tracking references that no longer exist,falsedo not prune,niluse configured settings Defaults to “nil”.
Example:
remote = Rugged::Remote.lookup(@repo, 'origin')
remote.fetch({
transfer_progress: lambda { |total_objects, indexed_objects, received_objects, local_objects, total_deltas, indexed_deltas, received_bytes|
# ...
}
})
581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 |
# File 'ext/rugged/rugged_remote.c', line 581 static VALUE rb_git_remote_fetch(int argc, VALUE *argv, VALUE self) { git_remote *remote; git_strarray refspecs; opts = GIT_FETCH_OPTIONS_INIT; const git_transfer_progress *stats; struct rugged_remote_cb_payload payload = { Qnil, Qnil, Qnil, Qnil, Qnil, Qnil, Qnil, 0 }; char * = NULL; int error; VALUE , rb_refspecs, rb_result = Qnil; rb_scan_args(argc, argv, "01:", &rb_refspecs, &); rugged_rb_ary_to_strarray(rb_refspecs, &refspecs); Data_Get_Struct(self, git_remote, remote); (, &opts.callbacks, &payload); init_custom_headers(, &opts.custom_headers); if (!NIL_P()) { VALUE rb_prune_type; VALUE rb_val = rb_hash_aref(, CSTR2SYM("message")); if (!NIL_P(rb_val)) = StringValueCStr(rb_val); rb_prune_type = rb_hash_aref(, CSTR2SYM("prune")); opts.prune = parse_prune_type(rb_prune_type); } error = git_remote_fetch(remote, &refspecs, &opts, ); xfree(refspecs.strings); xfree(opts.custom_headers.strings); if (payload.exception) rb_jump_tag(payload.exception); rugged_exception_check(error); stats = git_remote_stats(remote); rb_result = rb_hash_new(); rb_hash_aset(rb_result, CSTR2SYM("total_objects"), UINT2NUM(stats->total_objects)); rb_hash_aset(rb_result, CSTR2SYM("indexed_objects"), UINT2NUM(stats->indexed_objects)); rb_hash_aset(rb_result, CSTR2SYM("received_objects"), UINT2NUM(stats->received_objects)); rb_hash_aset(rb_result, CSTR2SYM("local_objects"), UINT2NUM(stats->local_objects)); rb_hash_aset(rb_result, CSTR2SYM("total_deltas"), UINT2NUM(stats->total_deltas)); rb_hash_aset(rb_result, CSTR2SYM("indexed_deltas"), UINT2NUM(stats->indexed_deltas)); rb_hash_aset(rb_result, CSTR2SYM("received_bytes"), INT2FIX(stats->received_bytes)); return rb_result; } |