rugged 0.22.0b1 → 0.22.0b2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/rugged/rugged_blob.c +53 -21
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/include/git2/remote.h +52 -8
- data/vendor/libgit2/src/odb.c +2 -2
- data/vendor/libgit2/src/push.c +2 -1
- data/vendor/libgit2/src/remote.c +61 -1
- data/vendor/libgit2/src/transports/http.c +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1fcbe10398bb6a72a8b366a061a86dc86a22d86
|
4
|
+
data.tar.gz: 6d0ab2ee6aa49b3d0d6e7f9c2f5c7ee18f01e820
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47f0d46dbfb6a493678c7c0fffc12d25ffadabc3b8210920a2f509556e2504b48de4223db27488e70a78da1d2bbf6d440dfe15b3992ff7a2ded9bdebf5219d3b
|
7
|
+
data.tar.gz: 2c83e8937a0bda990da855f793901299269ea2cf174c2e7f7501795c7f3a7377b37b60fe555a453963206d93c4c035fe24c9ee02afcd084d101e484426b35030
|
data/ext/rugged/rugged_blob.c
CHANGED
@@ -32,6 +32,7 @@ extern VALUE rb_cRuggedRepo;
|
|
32
32
|
static ID id_read;
|
33
33
|
|
34
34
|
VALUE rb_cRuggedBlob;
|
35
|
+
VALUE rb_cRuggedBlobLoader;
|
35
36
|
VALUE rb_cRuggedBlobSig;
|
36
37
|
|
37
38
|
/*
|
@@ -479,46 +480,75 @@ static VALUE rb_git_blob_diff(int argc, VALUE *argv, VALUE self)
|
|
479
480
|
return rugged_patch_new(self, patch);
|
480
481
|
}
|
481
482
|
|
482
|
-
|
483
|
+
/*
|
484
|
+
* call-seq:
|
485
|
+
* Rugged::Blob::Loader.new(repository, max_size) -> Blob::Loader instance
|
486
|
+
*
|
487
|
+
* Create a Blob Loader instance that allows you to bring several blobs
|
488
|
+
* from the object database with no extra memory cost by reusing the same
|
489
|
+
* underlying storage.
|
490
|
+
*
|
491
|
+
* repository - the repo where the blobs will be loaded from
|
492
|
+
* max_size - the maximum size for the underlying storage; blobs larger than
|
493
|
+
* that size will be truncated
|
494
|
+
*
|
495
|
+
* Example:
|
496
|
+
*
|
497
|
+
* loader = loader = Rugged::Blob::Loader.new(@repo, 4 * 1024)
|
498
|
+
* #=> Blob::Loader instance
|
499
|
+
*
|
500
|
+
* loader.load("d70d245ed97ed2aa596dd1af6536e4bfdb047b69")
|
501
|
+
* #=> [contents, real_size]
|
502
|
+
*/
|
503
|
+
static VALUE rb_git_blob_loader_new(VALUE self, VALUE rb_repo, VALUE rb_max_bytes)
|
483
504
|
{
|
484
|
-
|
485
|
-
|
505
|
+
long max_bytes;
|
506
|
+
|
507
|
+
rugged_check_repo(rb_repo);
|
508
|
+
Check_Type(rb_max_bytes, T_FIXNUM);
|
509
|
+
|
510
|
+
/* extra byte for NULL-termination */
|
511
|
+
max_bytes = (long)FIX2INT(rb_max_bytes) + 1;
|
512
|
+
|
513
|
+
rb_iv_set(self, "@repository", rb_repo);
|
514
|
+
rb_iv_set(self, "buffer", rb_str_buf_new(max_bytes));
|
515
|
+
return Qnil;
|
516
|
+
}
|
517
|
+
|
518
|
+
static VALUE rb_git_blob_loader_load(VALUE self, VALUE rb_sha1)
|
519
|
+
{
|
520
|
+
VALUE rb_ret, rb_repo, rb_buffer;
|
486
521
|
|
487
522
|
git_repository *repo = NULL;
|
488
523
|
git_blob *blob = NULL;
|
489
524
|
|
490
|
-
size_t size;
|
525
|
+
size_t size, capacity;
|
491
526
|
const char *content;
|
492
527
|
|
493
|
-
|
528
|
+
rb_repo = rb_iv_get(self, "@repository");
|
529
|
+
rb_buffer = rb_iv_get(self, "buffer");
|
494
530
|
|
531
|
+
Check_Type(rb_buffer, T_STRING);
|
495
532
|
rugged_check_repo(rb_repo);
|
496
533
|
Data_Get_Struct(rb_repo, git_repository, repo);
|
497
534
|
|
498
535
|
blob = (git_blob *)rugged_object_get(repo, rb_sha1, GIT_OBJ_BLOB);
|
499
536
|
|
500
537
|
content = git_blob_rawcontent(blob);
|
501
|
-
size = git_blob_rawsize(blob);
|
538
|
+
size = (long)git_blob_rawsize(blob);
|
539
|
+
capacity = rb_str_capacity(rb_buffer);
|
502
540
|
|
503
|
-
if (
|
504
|
-
|
541
|
+
if (size > capacity - 1)
|
542
|
+
size = capacity - 1;
|
505
543
|
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
if (maxbytes >= 0 && (size_t)maxbytes < size)
|
510
|
-
size = (size_t)maxbytes;
|
511
|
-
}
|
544
|
+
memcpy(RSTRING_PTR(rb_buffer), content, size);
|
545
|
+
rb_str_set_len(rb_buffer, size);
|
512
546
|
|
513
547
|
rb_ret = rb_ary_new();
|
514
|
-
|
515
|
-
rb_ary_push(rb_ret, rb_str_new(content, size));
|
548
|
+
rb_ary_push(rb_ret, rb_buffer);
|
516
549
|
rb_ary_push(rb_ret, INT2FIX(git_blob_rawsize(blob)));
|
517
550
|
|
518
551
|
git_object_free((git_object*)blob);
|
519
|
-
|
520
|
-
/* TODO: LOC */
|
521
|
-
|
522
552
|
return rb_ret;
|
523
553
|
}
|
524
554
|
|
@@ -591,9 +621,11 @@ void Init_rugged_blob(void)
|
|
591
621
|
rb_define_singleton_method(rb_cRuggedBlob, "from_disk", rb_git_blob_from_disk, 2);
|
592
622
|
rb_define_singleton_method(rb_cRuggedBlob, "from_io", rb_git_blob_from_io, -1);
|
593
623
|
|
594
|
-
rb_define_singleton_method(rb_cRuggedBlob, "to_buffer", rb_git_blob_to_buffer, -1);
|
595
|
-
|
596
624
|
rb_cRuggedBlobSig = rb_define_class_under(rb_cRuggedBlob, "HashSignature", rb_cObject);
|
597
625
|
rb_define_singleton_method(rb_cRuggedBlobSig, "new", rb_git_blob_sig_new, -1);
|
598
626
|
rb_define_singleton_method(rb_cRuggedBlobSig, "compare", rb_git_blob_sig_compare, 2);
|
627
|
+
|
628
|
+
rb_cRuggedBlobLoader = rb_define_class_under(rb_cRuggedBlob, "Loader", rb_cObject);
|
629
|
+
rb_define_method(rb_cRuggedBlobLoader, "initialize", rb_git_blob_loader_new, 2);
|
630
|
+
rb_define_method(rb_cRuggedBlobLoader, "load", rb_git_blob_loader_load, 1);
|
599
631
|
}
|
data/lib/rugged/version.rb
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
#include "indexer.h"
|
15
15
|
#include "strarray.h"
|
16
16
|
#include "transport.h"
|
17
|
+
#include "push.h"
|
17
18
|
|
18
19
|
/**
|
19
20
|
* @file git2/remote.h
|
@@ -280,14 +281,19 @@ GIT_EXTERN(const git_refspec *)git_remote_get_refspec(const git_remote *remote,
|
|
280
281
|
GIT_EXTERN(int) git_remote_connect(git_remote *remote, git_direction direction);
|
281
282
|
|
282
283
|
/**
|
283
|
-
* Get
|
284
|
+
* Get the remote repository's reference advertisement list
|
284
285
|
*
|
285
|
-
*
|
286
|
-
*
|
286
|
+
* Get the list of references with which the server responds to a new
|
287
|
+
* connection.
|
287
288
|
*
|
288
|
-
* The
|
289
|
-
*
|
290
|
-
* the
|
289
|
+
* The remote (or more exactly its transport) must have connected to
|
290
|
+
* the remote repository. This list is available as soon as the
|
291
|
+
* connection to the remote is initiated and it remains available
|
292
|
+
* after disconnecting.
|
293
|
+
*
|
294
|
+
* The memory belongs to the remote. The pointer will be valid as long
|
295
|
+
* as a new connection is not initiated, but it is recommended that
|
296
|
+
* you make a copy in order to make use of the data.
|
291
297
|
*
|
292
298
|
* @param out pointer to the array
|
293
299
|
* @param size the number of remote heads
|
@@ -337,8 +343,7 @@ GIT_EXTERN(void) git_remote_stop(git_remote *remote);
|
|
337
343
|
/**
|
338
344
|
* Disconnect from the remote
|
339
345
|
*
|
340
|
-
* Close the connection to the remote
|
341
|
-
* transport.
|
346
|
+
* Close the connection to the remote.
|
342
347
|
*
|
343
348
|
* @param remote the remote to disconnect from
|
344
349
|
*/
|
@@ -389,6 +394,23 @@ GIT_EXTERN(int) git_remote_fetch(
|
|
389
394
|
const git_signature *signature,
|
390
395
|
const char *reflog_message);
|
391
396
|
|
397
|
+
/**
|
398
|
+
* Perform a push
|
399
|
+
*
|
400
|
+
* Peform all the steps from a push.
|
401
|
+
*
|
402
|
+
* @param remote the remote to push to
|
403
|
+
* @param refspecs the refspecs to use for pushing. If none are
|
404
|
+
* passed, the configured refspecs will be used
|
405
|
+
* @param opts the options
|
406
|
+
* @param signature signature to use for the reflog of updated references
|
407
|
+
* @param reflog_message message to use for the reflog of upated references
|
408
|
+
*/
|
409
|
+
GIT_EXTERN(int) git_remote_push(git_remote *remote,
|
410
|
+
git_strarray *refspecs,
|
411
|
+
const git_push_options *opts,
|
412
|
+
const git_signature *signature, const char *reflog_message);
|
413
|
+
|
392
414
|
/**
|
393
415
|
* Get a list of the configured remotes for a repo
|
394
416
|
*
|
@@ -461,6 +483,28 @@ struct git_remote_callbacks {
|
|
461
483
|
*/
|
462
484
|
int (*update_tips)(const char *refname, const git_oid *a, const git_oid *b, void *data);
|
463
485
|
|
486
|
+
/**
|
487
|
+
* Function to call with progress information during pack
|
488
|
+
* building. Be aware that this is called inline with pack
|
489
|
+
* building operations, so performance may be affected.
|
490
|
+
*/
|
491
|
+
git_packbuilder_progress pack_progress;
|
492
|
+
|
493
|
+
/**
|
494
|
+
* Function to call with progress information during the
|
495
|
+
* upload portion of a push. Be aware that this is called
|
496
|
+
* inline with pack building operations, so performance may be
|
497
|
+
* affected.
|
498
|
+
*/
|
499
|
+
git_push_transfer_progress push_transfer_progress;
|
500
|
+
|
501
|
+
/**
|
502
|
+
* Called for each updated reference on push. If `status` is
|
503
|
+
* not `NULL`, the update was rejected by the remote server
|
504
|
+
* and `status` contains the reason given.
|
505
|
+
*/
|
506
|
+
int (*push_update_reference)(const char *refname, const char *status, void *data);
|
507
|
+
|
464
508
|
/**
|
465
509
|
* This will be passed to each of the callbacks in this struct
|
466
510
|
* as the last parameter.
|
data/vendor/libgit2/src/odb.c
CHANGED
@@ -762,12 +762,12 @@ static int hardcoded_objects(git_rawobj *raw, const git_oid *id)
|
|
762
762
|
if (!git_oid_cmp(id, &empty_blob)) {
|
763
763
|
raw->type = GIT_OBJ_BLOB;
|
764
764
|
raw->len = 0;
|
765
|
-
raw->data =
|
765
|
+
raw->data = git__calloc(1, sizeof(uint8_t));
|
766
766
|
return 0;
|
767
767
|
} else if (!git_oid_cmp(id, &empty_tree)) {
|
768
768
|
raw->type = GIT_OBJ_TREE;
|
769
769
|
raw->len = 0;
|
770
|
-
raw->data =
|
770
|
+
raw->data = git__calloc(1, sizeof(uint8_t));
|
771
771
|
return 0;
|
772
772
|
} else {
|
773
773
|
return GIT_ENOTFOUND;
|
data/vendor/libgit2/src/push.c
CHANGED
@@ -333,7 +333,8 @@ static int revwalk(git_vector *commits, git_push *push)
|
|
333
333
|
continue;
|
334
334
|
|
335
335
|
if (!git_odb_exists(push->repo->_odb, &spec->roid)) {
|
336
|
-
giterr_set(GITERR_REFERENCE,
|
336
|
+
giterr_set(GITERR_REFERENCE,
|
337
|
+
"Cannot push because a reference that you are trying to update on the remote contains commits that are not present locally.");
|
337
338
|
error = GIT_ENONFASTFORWARD;
|
338
339
|
goto on_error;
|
339
340
|
}
|
data/vendor/libgit2/src/remote.c
CHANGED
@@ -706,7 +706,7 @@ int git_remote_ls(const git_remote_head ***out, size_t *size, git_remote *remote
|
|
706
706
|
assert(remote);
|
707
707
|
|
708
708
|
if (!remote->transport) {
|
709
|
-
giterr_set(GITERR_NET, "
|
709
|
+
giterr_set(GITERR_NET, "this remote has never connected");
|
710
710
|
return -1;
|
711
711
|
}
|
712
712
|
|
@@ -2115,3 +2115,63 @@ int git_remote_default_branch(git_buf *out, git_remote *remote)
|
|
2115
2115
|
|
2116
2116
|
return git_buf_puts(out, guess->name);
|
2117
2117
|
}
|
2118
|
+
|
2119
|
+
int git_remote_push(git_remote *remote, git_strarray *refspecs, const git_push_options *opts,
|
2120
|
+
const git_signature *signature, const char *reflog_message)
|
2121
|
+
{
|
2122
|
+
int error;
|
2123
|
+
size_t i;
|
2124
|
+
git_push *push = NULL;
|
2125
|
+
git_remote_callbacks *cbs;
|
2126
|
+
git_refspec *spec;
|
2127
|
+
|
2128
|
+
assert(remote && refspecs);
|
2129
|
+
|
2130
|
+
if ((error = git_remote_connect(remote, GIT_DIRECTION_PUSH)) < 0)
|
2131
|
+
return error;
|
2132
|
+
|
2133
|
+
if ((error = git_push_new(&push, remote)) < 0)
|
2134
|
+
goto cleanup;
|
2135
|
+
|
2136
|
+
if (opts && (error = git_push_set_options(push, opts)) < 0)
|
2137
|
+
goto cleanup;
|
2138
|
+
|
2139
|
+
if (refspecs && refspecs->count > 0) {
|
2140
|
+
for (i = 0; i < refspecs->count; i++) {
|
2141
|
+
if ((error = git_push_add_refspec(push, refspecs->strings[i])) < 0)
|
2142
|
+
goto cleanup;
|
2143
|
+
}
|
2144
|
+
} else {
|
2145
|
+
git_vector_foreach(&remote->refspecs, i, spec) {
|
2146
|
+
if (!spec->push)
|
2147
|
+
continue;
|
2148
|
+
if ((error = git_push_add_refspec(push, spec->string)) < 0)
|
2149
|
+
goto cleanup;
|
2150
|
+
}
|
2151
|
+
}
|
2152
|
+
|
2153
|
+
cbs = &remote->callbacks;
|
2154
|
+
if ((error = git_push_set_callbacks(push,
|
2155
|
+
cbs->pack_progress, cbs->payload,
|
2156
|
+
cbs->push_transfer_progress, cbs->payload)) < 0)
|
2157
|
+
goto cleanup;
|
2158
|
+
|
2159
|
+
if ((error = git_push_finish(push)) < 0)
|
2160
|
+
goto cleanup;
|
2161
|
+
|
2162
|
+
if (!git_push_unpack_ok(push)) {
|
2163
|
+
error = -1;
|
2164
|
+
giterr_set(GITERR_NET, "error in the remote while trying to unpack");
|
2165
|
+
goto cleanup;
|
2166
|
+
}
|
2167
|
+
|
2168
|
+
if ((error = git_push_status_foreach(push, cbs->push_update_reference, cbs->payload)) < 0)
|
2169
|
+
goto cleanup;
|
2170
|
+
|
2171
|
+
error = git_push_update_tips(push, signature, reflog_message);
|
2172
|
+
|
2173
|
+
cleanup:
|
2174
|
+
git_remote_disconnect(remote);
|
2175
|
+
git_push_free(push);
|
2176
|
+
return error;
|
2177
|
+
}
|
@@ -1009,6 +1009,7 @@ static int http_close(git_smart_subtransport *subtransport)
|
|
1009
1009
|
git_vector_clear(&t->auth_contexts);
|
1010
1010
|
|
1011
1011
|
gitno_connection_data_free_ptrs(&t->connection_data);
|
1012
|
+
memset(&t->connection_data, 0x0, sizeof(gitno_connection_data));
|
1012
1013
|
|
1013
1014
|
return 0;
|
1014
1015
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rugged
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.22.
|
4
|
+
version: 0.22.0b2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chacon
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-11-
|
12
|
+
date: 2014-11-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|