rugged 0.23.0b2 → 0.23.0b4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_blob.c +39 -0
  3. data/ext/rugged/rugged_diff.c +7 -3
  4. data/ext/rugged/rugged_index.c +2 -2
  5. data/ext/rugged/rugged_remote.c +27 -148
  6. data/ext/rugged/rugged_remote_collection.c +134 -12
  7. data/ext/rugged/rugged_repo.c +74 -5
  8. data/ext/rugged/rugged_submodule.c +18 -208
  9. data/ext/rugged/rugged_submodule_collection.c +148 -0
  10. data/lib/rugged/version.rb +1 -1
  11. data/vendor/libgit2/AUTHORS +1 -0
  12. data/vendor/libgit2/CMakeLists.txt +33 -25
  13. data/vendor/libgit2/deps/winhttp/winhttp.def +29 -29
  14. data/vendor/libgit2/include/git2.h +1 -1
  15. data/vendor/libgit2/include/git2/blob.h +4 -6
  16. data/vendor/libgit2/include/git2/checkout.h +10 -1
  17. data/vendor/libgit2/include/git2/clone.h +6 -7
  18. data/vendor/libgit2/include/git2/commit.h +11 -0
  19. data/vendor/libgit2/include/git2/cred_helpers.h +2 -2
  20. data/vendor/libgit2/include/git2/describe.h +1 -1
  21. data/vendor/libgit2/include/git2/diff.h +68 -11
  22. data/vendor/libgit2/include/git2/errors.h +4 -1
  23. data/vendor/libgit2/include/git2/filter.h +16 -0
  24. data/vendor/libgit2/include/git2/index.h +38 -11
  25. data/vendor/libgit2/include/git2/odb.h +1 -1
  26. data/vendor/libgit2/include/git2/odb_backend.h +2 -2
  27. data/vendor/libgit2/include/git2/remote.h +300 -207
  28. data/vendor/libgit2/include/git2/reset.h +1 -0
  29. data/vendor/libgit2/include/git2/stash.h +135 -4
  30. data/vendor/libgit2/include/git2/status.h +1 -0
  31. data/vendor/libgit2/include/git2/submodule.h +46 -75
  32. data/vendor/libgit2/include/git2/sys/odb_backend.h +1 -1
  33. data/vendor/libgit2/include/git2/sys/stream.h +2 -0
  34. data/vendor/libgit2/include/git2/sys/transport.h +1 -21
  35. data/vendor/libgit2/include/git2/transport.h +27 -0
  36. data/vendor/libgit2/include/git2/types.h +20 -10
  37. data/vendor/libgit2/include/git2/version.h +3 -3
  38. data/vendor/libgit2/libgit2.pc.in +4 -2
  39. data/vendor/libgit2/src/attr.c +2 -1
  40. data/vendor/libgit2/src/attr_file.c +18 -37
  41. data/vendor/libgit2/src/blame.c +2 -2
  42. data/vendor/libgit2/src/blob.c +4 -3
  43. data/vendor/libgit2/src/branch.c +6 -3
  44. data/vendor/libgit2/src/buf_text.c +4 -6
  45. data/vendor/libgit2/src/buf_text.h +1 -2
  46. data/vendor/libgit2/src/buffer.c +8 -6
  47. data/vendor/libgit2/src/buffer.h +1 -1
  48. data/vendor/libgit2/src/cache.c +1 -0
  49. data/vendor/libgit2/src/checkout.c +34 -20
  50. data/vendor/libgit2/src/clone.c +29 -29
  51. data/vendor/libgit2/src/commit.c +65 -0
  52. data/vendor/libgit2/src/common.h +5 -0
  53. data/vendor/libgit2/src/config.c +20 -0
  54. data/vendor/libgit2/src/config.h +6 -0
  55. data/vendor/libgit2/src/config_file.c +2 -2
  56. data/vendor/libgit2/src/crlf.c +39 -17
  57. data/vendor/libgit2/src/curl_stream.c +257 -0
  58. data/vendor/libgit2/src/curl_stream.h +14 -0
  59. data/vendor/libgit2/src/diff.c +223 -88
  60. data/vendor/libgit2/src/diff.h +21 -1
  61. data/vendor/libgit2/src/diff_file.c +23 -13
  62. data/vendor/libgit2/src/diff_file.h +4 -2
  63. data/vendor/libgit2/src/diff_patch.c +266 -71
  64. data/vendor/libgit2/src/diff_patch.h +36 -0
  65. data/vendor/libgit2/src/diff_print.c +156 -126
  66. data/vendor/libgit2/src/diff_tform.c +32 -54
  67. data/vendor/libgit2/src/fetch.c +27 -10
  68. data/vendor/libgit2/src/fetch.h +2 -2
  69. data/vendor/libgit2/src/filebuf.c +1 -1
  70. data/vendor/libgit2/src/fileops.c +6 -2
  71. data/vendor/libgit2/src/filter.c +28 -7
  72. data/vendor/libgit2/src/fnmatch.c +5 -5
  73. data/vendor/libgit2/src/global.c +16 -0
  74. data/vendor/libgit2/src/ident.c +2 -2
  75. data/vendor/libgit2/src/ignore.c +1 -0
  76. data/vendor/libgit2/src/index.c +338 -80
  77. data/vendor/libgit2/src/index.h +4 -1
  78. data/vendor/libgit2/src/indexer.c +19 -5
  79. data/vendor/libgit2/src/iterator.c +118 -11
  80. data/vendor/libgit2/src/iterator.h +25 -0
  81. data/vendor/libgit2/src/merge.c +96 -106
  82. data/vendor/libgit2/src/merge.h +14 -4
  83. data/vendor/libgit2/src/netops.c +3 -3
  84. data/vendor/libgit2/src/odb.c +17 -9
  85. data/vendor/libgit2/src/odb.h +1 -1
  86. data/vendor/libgit2/src/odb_loose.c +2 -2
  87. data/vendor/libgit2/src/odb_pack.c +1 -1
  88. data/vendor/libgit2/src/openssl_stream.c +118 -27
  89. data/vendor/libgit2/src/pack-objects.c +28 -0
  90. data/vendor/libgit2/src/pack-objects.h +1 -0
  91. data/vendor/libgit2/src/pack.c +18 -10
  92. data/vendor/libgit2/src/path.c +16 -11
  93. data/vendor/libgit2/src/path.h +1 -1
  94. data/vendor/libgit2/src/push.c +26 -42
  95. data/vendor/libgit2/src/push.h +2 -34
  96. data/vendor/libgit2/src/rebase.c +1 -1
  97. data/vendor/libgit2/src/refs.c +1 -1
  98. data/vendor/libgit2/src/refspec.c +6 -0
  99. data/vendor/libgit2/src/remote.c +381 -274
  100. data/vendor/libgit2/src/remote.h +0 -4
  101. data/vendor/libgit2/src/repository.c +33 -12
  102. data/vendor/libgit2/src/repository.h +0 -1
  103. data/vendor/libgit2/src/reset.c +1 -0
  104. data/vendor/libgit2/src/stash.c +439 -17
  105. data/vendor/libgit2/src/status.c +6 -0
  106. data/vendor/libgit2/src/stransport_stream.c +58 -21
  107. data/vendor/libgit2/src/stream.h +15 -0
  108. data/vendor/libgit2/src/submodule.c +410 -664
  109. data/vendor/libgit2/src/submodule.h +0 -24
  110. data/vendor/libgit2/src/transaction.c +1 -0
  111. data/vendor/libgit2/src/transports/cred.c +55 -1
  112. data/vendor/libgit2/src/transports/http.c +18 -2
  113. data/vendor/libgit2/src/transports/local.c +60 -59
  114. data/vendor/libgit2/src/transports/smart.h +1 -1
  115. data/vendor/libgit2/src/transports/smart_protocol.c +11 -11
  116. data/vendor/libgit2/src/transports/ssh.c +46 -7
  117. data/vendor/libgit2/src/unix/posix.h +4 -0
  118. data/vendor/libgit2/src/util.c +9 -9
  119. data/vendor/libgit2/src/util.h +9 -0
  120. data/vendor/libgit2/src/win32/posix.h +3 -0
  121. data/vendor/libgit2/src/win32/posix_w32.c +38 -0
  122. data/vendor/libgit2/src/win32/w32_util.h +10 -0
  123. metadata +4 -3
  124. data/vendor/libgit2/include/git2/push.h +0 -94
@@ -99,23 +99,6 @@ struct git_submodule {
99
99
  git_oid wd_oid;
100
100
  };
101
101
 
102
- /**
103
- * The git_submodule_cache stores known submodules along with timestamps,
104
- * etc. about when they were loaded
105
- */
106
- typedef struct {
107
- git_repository *repo;
108
- git_strmap *submodules;
109
- git_mutex lock;
110
-
111
- /* cache invalidation data */
112
- git_oid head_id;
113
- git_futils_filestamp index_stamp;
114
- git_buf gitmodules_path;
115
- git_futils_filestamp gitmodules_stamp;
116
- git_futils_filestamp config_stamp;
117
- } git_submodule_cache;
118
-
119
102
  /* Force revalidation of submodule data cache (alloc as needed) */
120
103
  extern int git_submodule_cache_refresh(git_repository *repo);
121
104
 
@@ -137,9 +120,6 @@ enum {
137
120
  #define GIT_SUBMODULE_STATUS__CLEAR_INTERNAL(S) \
138
121
  ((S) & ~(0xFFFFFFFFu << 20))
139
122
 
140
- /* Internal submodule check does not attempt to refresh cached data */
141
- extern bool git_submodule__is_submodule(git_repository *repo, const char *name);
142
-
143
123
  /* Internal lookup does not attempt to refresh cached data */
144
124
  extern int git_submodule__lookup(
145
125
  git_submodule **out, git_repository *repo, const char *path);
@@ -163,8 +143,4 @@ extern int git_submodule_parse_ignore(
163
143
  extern int git_submodule_parse_update(
164
144
  git_submodule_update_t *out, const char *value);
165
145
 
166
- extern const char *git_submodule_ignore_to_str(git_submodule_ignore_t);
167
- extern const char *git_submodule_update_to_str(git_submodule_update_t);
168
- extern const char *git_submodule_recurse_to_str(git_submodule_recurse_t);
169
-
170
146
  #endif
@@ -13,6 +13,7 @@
13
13
  #include "reflog.h"
14
14
  #include "signature.h"
15
15
 
16
+ #include "git2/transaction.h"
16
17
  #include "git2/signature.h"
17
18
  #include "git2/sys/refs.h"
18
19
  #include "git2/sys/refdb_backend.h"
@@ -9,6 +9,14 @@
9
9
  #include "smart.h"
10
10
  #include "git2/cred_helpers.h"
11
11
 
12
+ static int git_cred_ssh_key_type_new(
13
+ git_cred **cred,
14
+ const char *username,
15
+ const char *publickey,
16
+ const char *privatekey,
17
+ const char *passphrase,
18
+ git_credtype_t credtype);
19
+
12
20
  int git_cred_has_username(git_cred *cred)
13
21
  {
14
22
  if (cred->credtype == GIT_CREDTYPE_DEFAULT)
@@ -31,6 +39,7 @@ const char *git_cred__username(git_cred *cred)
31
39
  return c->username;
32
40
  }
33
41
  case GIT_CREDTYPE_SSH_KEY:
42
+ case GIT_CREDTYPE_SSH_MEMORY:
34
43
  {
35
44
  git_cred_ssh_key *c = (git_cred_ssh_key *) cred;
36
45
  return c->username;
@@ -174,6 +183,51 @@ int git_cred_ssh_key_new(
174
183
  const char *publickey,
175
184
  const char *privatekey,
176
185
  const char *passphrase)
186
+ {
187
+ return git_cred_ssh_key_type_new(
188
+ cred,
189
+ username,
190
+ publickey,
191
+ privatekey,
192
+ passphrase,
193
+ GIT_CREDTYPE_SSH_KEY);
194
+ }
195
+
196
+ int git_cred_ssh_key_memory_new(
197
+ git_cred **cred,
198
+ const char *username,
199
+ const char *publickey,
200
+ const char *privatekey,
201
+ const char *passphrase)
202
+ {
203
+ #ifdef GIT_SSH_MEMORY_CREDENTIALS
204
+ return git_cred_ssh_key_type_new(
205
+ cred,
206
+ username,
207
+ publickey,
208
+ privatekey,
209
+ passphrase,
210
+ GIT_CREDTYPE_SSH_MEMORY);
211
+ #else
212
+ GIT_UNUSED(cred);
213
+ GIT_UNUSED(username);
214
+ GIT_UNUSED(publickey);
215
+ GIT_UNUSED(privatekey);
216
+ GIT_UNUSED(passphrase);
217
+
218
+ giterr_set(GITERR_INVALID,
219
+ "This version of libgit2 was not built with ssh memory credentials.");
220
+ return -1;
221
+ #endif
222
+ }
223
+
224
+ static int git_cred_ssh_key_type_new(
225
+ git_cred **cred,
226
+ const char *username,
227
+ const char *publickey,
228
+ const char *privatekey,
229
+ const char *passphrase,
230
+ git_credtype_t credtype)
177
231
  {
178
232
  git_cred_ssh_key *c;
179
233
 
@@ -182,7 +236,7 @@ int git_cred_ssh_key_new(
182
236
  c = git__calloc(1, sizeof(git_cred_ssh_key));
183
237
  GITERR_CHECK_ALLOC(c);
184
238
 
185
- c->parent.credtype = GIT_CREDTYPE_SSH_KEY;
239
+ c->parent.credtype = credtype;
186
240
  c->parent.free = ssh_key_free;
187
241
 
188
242
  c->username = git__strdup(username);
@@ -10,11 +10,13 @@
10
10
  #include "http_parser.h"
11
11
  #include "buffer.h"
12
12
  #include "netops.h"
13
+ #include "remote.h"
13
14
  #include "smart.h"
14
15
  #include "auth.h"
15
16
  #include "auth_negotiate.h"
16
17
  #include "tls_stream.h"
17
18
  #include "socket_stream.h"
19
+ #include "curl_stream.h"
18
20
 
19
21
  git_http_auth_scheme auth_schemes[] = {
20
22
  { GIT_AUTHTYPE_NEGOTIATE, "Negotiate", GIT_CREDTYPE_DEFAULT, git_http_auth_negotiate },
@@ -70,7 +72,7 @@ typedef struct {
70
72
  gitno_buffer parse_buffer;
71
73
  git_buf parse_header_name;
72
74
  git_buf parse_header_value;
73
- char parse_buffer_data[2048];
75
+ char parse_buffer_data[NETIO_BUFSIZE];
74
76
  char *content_type;
75
77
  char *location;
76
78
  git_vector www_authenticate;
@@ -532,6 +534,7 @@ static int write_chunk(git_stream *io, const char *buffer, size_t len)
532
534
  static int http_connect(http_subtransport *t)
533
535
  {
534
536
  int error;
537
+ char *proxy_url;
535
538
 
536
539
  if (t->connected &&
537
540
  http_should_keep_alive(&t->parser) &&
@@ -547,7 +550,11 @@ static int http_connect(http_subtransport *t)
547
550
  if (t->connection_data.use_ssl) {
548
551
  error = git_tls_stream_new(&t->io, t->connection_data.host, t->connection_data.port);
549
552
  } else {
553
+ #ifdef GIT_CURL
554
+ error = git_curl_stream_new(&t->io, t->connection_data.host, t->connection_data.port);
555
+ #else
550
556
  error = git_socket_stream_new(&t->io, t->connection_data.host, t->connection_data.port);
557
+ #endif
551
558
  }
552
559
 
553
560
  if (error < 0)
@@ -555,9 +562,18 @@ static int http_connect(http_subtransport *t)
555
562
 
556
563
  GITERR_CHECK_VERSION(t->io, GIT_STREAM_VERSION, "git_stream");
557
564
 
565
+ if (git_stream_supports_proxy(t->io) &&
566
+ !git_remote__get_http_proxy(t->owner->owner, !!t->connection_data.use_ssl, &proxy_url)) {
567
+ error = git_stream_set_proxy(t->io, proxy_url);
568
+ git__free(proxy_url);
569
+
570
+ if (error < 0)
571
+ return error;
572
+ }
573
+
558
574
  error = git_stream_connect(t->io);
559
575
 
560
- #if defined(GIT_OPENSSL) || defined(GIT_SECURE_TRANSPORT)
576
+ #if defined(GIT_OPENSSL) || defined(GIT_SECURE_TRANSPORT) || defined(GIT_CURL)
561
577
  if ((!error || error == GIT_ECERTIFICATE) && t->owner->certificate_check_cb != NULL &&
562
578
  git_stream_is_encrypted(t->io)) {
563
579
  git_cert *cert;
@@ -16,7 +16,6 @@
16
16
  #include "git2/pack.h"
17
17
  #include "git2/commit.h"
18
18
  #include "git2/revparse.h"
19
- #include "git2/push.h"
20
19
  #include "pack-objects.h"
21
20
  #include "refs.h"
22
21
  #include "posix.h"
@@ -290,50 +289,6 @@ static int local_negotiate_fetch(
290
289
  return 0;
291
290
  }
292
291
 
293
- static int local_push_copy_object(
294
- git_odb *local_odb,
295
- git_odb *remote_odb,
296
- git_pobject *obj)
297
- {
298
- int error = 0;
299
- git_odb_object *odb_obj = NULL;
300
- git_odb_stream *odb_stream;
301
- size_t odb_obj_size;
302
- git_otype odb_obj_type;
303
- git_oid remote_odb_obj_oid;
304
-
305
- /* Object already exists in the remote ODB; do nothing and return 0*/
306
- if (git_odb_exists(remote_odb, &obj->id))
307
- return 0;
308
-
309
- if ((error = git_odb_read(&odb_obj, local_odb, &obj->id)) < 0)
310
- return error;
311
-
312
- odb_obj_size = git_odb_object_size(odb_obj);
313
- odb_obj_type = git_odb_object_type(odb_obj);
314
-
315
- if ((error = git_odb_open_wstream(&odb_stream, remote_odb,
316
- odb_obj_size, odb_obj_type)) < 0)
317
- goto on_error;
318
-
319
- if (git_odb_stream_write(odb_stream, (char *)git_odb_object_data(odb_obj),
320
- odb_obj_size) < 0 ||
321
- git_odb_stream_finalize_write(&remote_odb_obj_oid, odb_stream) < 0) {
322
- error = -1;
323
- } else if (git_oid__cmp(&obj->id, &remote_odb_obj_oid) != 0) {
324
- giterr_set(GITERR_ODB, "Error when writing object to remote odb "
325
- "during local push operation. Remote odb object oid does not "
326
- "match local oid.");
327
- error = -1;
328
- }
329
-
330
- git_odb_stream_free(odb_stream);
331
-
332
- on_error:
333
- git_odb_object_free(odb_obj);
334
- return error;
335
- }
336
-
337
292
  static int local_push_update_remote_ref(
338
293
  git_repository *remote_repo,
339
294
  const char *lref,
@@ -364,22 +319,33 @@ static int local_push_update_remote_ref(
364
319
  return error;
365
320
  }
366
321
 
322
+ static int transfer_to_push_transfer(const git_transfer_progress *stats, void *payload)
323
+ {
324
+ const git_remote_callbacks *cbs = payload;
325
+
326
+ if (!cbs || !cbs->push_transfer_progress)
327
+ return 0;
328
+
329
+ return cbs->push_transfer_progress(stats->received_objects, stats->total_objects, stats->received_bytes,
330
+ cbs->payload);
331
+ }
332
+
367
333
  static int local_push(
368
334
  git_transport *transport,
369
- git_push *push)
335
+ git_push *push,
336
+ const git_remote_callbacks *cbs)
370
337
  {
371
338
  transport_local *t = (transport_local *)transport;
372
- git_odb *remote_odb = NULL;
373
- git_odb *local_odb = NULL;
374
339
  git_repository *remote_repo = NULL;
375
340
  push_spec *spec;
376
341
  char *url = NULL;
377
342
  const char *path;
378
- git_buf buf = GIT_BUF_INIT;
343
+ git_buf buf = GIT_BUF_INIT, odb_path = GIT_BUF_INIT;
379
344
  int error;
380
- unsigned int i;
381
345
  size_t j;
382
346
 
347
+ GIT_UNUSED(cbs);
348
+
383
349
  /* 'push->remote->url' may be a url or path; convert to a path */
384
350
  if ((error = git_path_from_url_or_path(&buf, push->remote->url)) < 0) {
385
351
  git_buf_free(&buf);
@@ -396,22 +362,24 @@ static int local_push(
396
362
 
397
363
  /* We don't currently support pushing locally to non-bare repos. Proper
398
364
  non-bare repo push support would require checking configs to see if
399
- we should override the default 'don't let this happen' behavior */
365
+ we should override the default 'don't let this happen' behavior.
366
+
367
+ Note that this is only an issue when pushing to the current branch,
368
+ but we forbid all pushes just in case */
400
369
  if (!remote_repo->is_bare) {
401
370
  error = GIT_EBAREREPO;
402
371
  giterr_set(GITERR_INVALID, "Local push doesn't (yet) support pushing to non-bare repos.");
403
372
  goto on_error;
404
373
  }
405
374
 
406
- if ((error = git_repository_odb__weakptr(&remote_odb, remote_repo)) < 0 ||
407
- (error = git_repository_odb__weakptr(&local_odb, push->repo)) < 0)
375
+ if ((error = git_buf_joinpath(&odb_path, git_repository_path(remote_repo), "objects/pack")) < 0)
408
376
  goto on_error;
409
377
 
410
- for (i = 0; i < push->pb->nr_objects; i++) {
411
- if ((error = local_push_copy_object(local_odb, remote_odb,
412
- &push->pb->object_list[i])) < 0)
413
- goto on_error;
414
- }
378
+ error = git_packbuilder_write(push->pb, odb_path.ptr, 0, transfer_to_push_transfer, (void *) cbs);
379
+ git_buf_free(&odb_path);
380
+
381
+ if (error < 0)
382
+ goto on_error;
415
383
 
416
384
  push->unpack_ok = 1;
417
385
 
@@ -471,7 +439,7 @@ static int local_push(
471
439
 
472
440
  if (!url || t->parent.close(&t->parent) < 0 ||
473
441
  t->parent.connect(&t->parent, url,
474
- push->remote->callbacks.credentials, NULL, GIT_DIRECTION_PUSH, flags))
442
+ NULL, NULL, GIT_DIRECTION_PUSH, flags))
475
443
  goto on_error;
476
444
  }
477
445
 
@@ -500,6 +468,37 @@ static int foreach_cb(void *buf, size_t len, void *payload)
500
468
  }
501
469
 
502
470
  static const char *counting_objects_fmt = "Counting objects %d\r";
471
+ static const char *compressing_objects_fmt = "Compressing objects: %.0f%% (%d/%d)";
472
+
473
+ static int local_counting(int stage, unsigned int current, unsigned int total, void *payload)
474
+ {
475
+ git_buf progress_info = GIT_BUF_INIT;
476
+ transport_local *t = payload;
477
+ int error;
478
+
479
+ if (!t->progress_cb)
480
+ return 0;
481
+
482
+ if (stage == GIT_PACKBUILDER_ADDING_OBJECTS) {
483
+ git_buf_printf(&progress_info, counting_objects_fmt, current);
484
+ } else if (stage == GIT_PACKBUILDER_DELTAFICATION) {
485
+ float perc = (((float) current) / total) * 100;
486
+ git_buf_printf(&progress_info, compressing_objects_fmt, perc, current, total);
487
+ if (current == total)
488
+ git_buf_printf(&progress_info, ", done\n");
489
+ else
490
+ git_buf_putc(&progress_info, '\r');
491
+
492
+ }
493
+
494
+ if (git_buf_oom(&progress_info))
495
+ return -1;
496
+
497
+ error = t->progress_cb(git_buf_cstr(&progress_info), git_buf_len(&progress_info), t->message_cb_payload);
498
+ git_buf_free(&progress_info);
499
+
500
+ return error;
501
+ }
503
502
 
504
503
  static int local_download_pack(
505
504
  git_transport *transport,
@@ -525,6 +524,8 @@ static int local_download_pack(
525
524
  if ((error = git_packbuilder_new(&pack, t->repo)) < 0)
526
525
  goto cleanup;
527
526
 
527
+ git_packbuilder_set_callbacks(pack, local_counting, t);
528
+
528
529
  stats->total_objects = 0;
529
530
  stats->indexed_objects = 0;
530
531
  stats->received_objects = 0;
@@ -158,7 +158,7 @@ typedef struct {
158
158
  /* smart_protocol.c */
159
159
  int git_smart__store_refs(transport_smart *t, int flushes);
160
160
  int git_smart__detect_caps(git_pkt_ref *pkt, transport_smart_caps *caps, git_vector *symrefs);
161
- int git_smart__push(git_transport *transport, git_push *push);
161
+ int git_smart__push(git_transport *transport, git_push *push, const git_remote_callbacks *cbs);
162
162
 
163
163
  int git_smart__negotiate_fetch(
164
164
  git_transport *transport,
@@ -51,8 +51,8 @@ int git_smart__store_refs(transport_smart *t, int flushes)
51
51
  return recvd;
52
52
 
53
53
  if (recvd == 0 && !flush) {
54
- giterr_set(GITERR_NET, "Early EOF");
55
- return -1;
54
+ giterr_set(GITERR_NET, "early EOF");
55
+ return GIT_EEOF;
56
56
  }
57
57
 
58
58
  continue;
@@ -769,8 +769,8 @@ static int parse_report(transport_smart *transport, git_push *push)
769
769
  return recvd;
770
770
 
771
771
  if (recvd == 0) {
772
- giterr_set(GITERR_NET, "Early EOF");
773
- return -1;
772
+ giterr_set(GITERR_NET, "early EOF");
773
+ return GIT_EEOF;
774
774
  }
775
775
  continue;
776
776
  }
@@ -946,7 +946,7 @@ static int stream_thunk(void *buf, size_t size, void *data)
946
946
  return error;
947
947
  }
948
948
 
949
- int git_smart__push(git_transport *transport, git_push *push)
949
+ int git_smart__push(git_transport *transport, git_push *push, const git_remote_callbacks *cbs)
950
950
  {
951
951
  transport_smart *t = (transport_smart *)transport;
952
952
  struct push_packbuilder_payload packbuilder_payload = {0};
@@ -957,9 +957,9 @@ int git_smart__push(git_transport *transport, git_push *push)
957
957
 
958
958
  packbuilder_payload.pb = push->pb;
959
959
 
960
- if (push->transfer_progress_cb) {
961
- packbuilder_payload.cb = push->transfer_progress_cb;
962
- packbuilder_payload.cb_payload = push->transfer_progress_cb_payload;
960
+ if (cbs && cbs->transfer_progress) {
961
+ packbuilder_payload.cb = cbs->push_transfer_progress;
962
+ packbuilder_payload.cb_payload = cbs->payload;
963
963
  }
964
964
 
965
965
  #ifdef PUSH_DEBUG
@@ -1010,12 +1010,12 @@ int git_smart__push(git_transport *transport, git_push *push)
1010
1010
  goto done;
1011
1011
 
1012
1012
  /* If progress is being reported write the final report */
1013
- if (push->transfer_progress_cb) {
1014
- error = push->transfer_progress_cb(
1013
+ if (cbs && cbs->push_transfer_progress) {
1014
+ error = cbs->push_transfer_progress(
1015
1015
  push->pb->nr_written,
1016
1016
  push->pb->nr_objects,
1017
1017
  packbuilder_payload.last_bytes,
1018
- push->transfer_progress_cb_payload);
1018
+ cbs->payload);
1019
1019
 
1020
1020
  if (error < 0)
1021
1021
  goto done;