rugged 0.22.0b1 → 0.22.0b2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|