index.jsView |
---|
289 | 289 … | } |
290 | 290 … | |
291 | 291 … | |
292 | 292 … | function receivePack(read, repo, options) { |
293 | | - var sendRefs = receivePackHeader([ |
| 293 … | + var serverCaps = [ |
294 | 294 … | agentCap, |
295 | 295 … | 'delete-refs', |
296 | 296 … | 'quiet', |
297 | | - 'no-thin', |
298 | | - ], repo.refs(), null) |
| 297 … | + 'no-thin' |
| 298 … | + ] |
| 299 … | + if (repo.setPushOptions) serverCaps.push('push-options') |
| 300 … | + var sendRefs = receivePackHeader(serverCaps, repo.refs(), null) |
299 | 301 … | var done = multicb({pluck: 1}) |
300 | 302 … | |
| 303 … | + var clientCaps = {} |
| 304 … | + |
301 | 305 … | function onCaps(caps) { |
| 306 … | + clientCaps = caps |
302 | 307 … | if (options.verbosity >= 2) { |
303 | 308 … | console.error('client capabilities:', caps) |
304 | 309 … | } |
305 | 310 … | } |
320 | 325 … | lines.updates, |
321 | 326 … | pull.collect(function (err, updates) { |
322 | 327 … | if (err) return cb(err) |
323 | 328 … | if (updates.length === 0) return cb(true) |
324 | | - var progress = progressObjects(options) |
| 329 … | + var usePushOpts = clientCaps['push-options'] |
| 330 … | + pull( |
| 331 … | + usePushOpts ? lines.pktLineStrs : pull.empty(), |
| 332 … | + pull.reduce(function (opts, opt) { |
| 333 … | + opts[opt] = true |
| 334 … | + return opts |
| 335 … | + }, {}, pushOptsCb) |
| 336 … | + ) |
| 337 … | + function pushOptsCb(err, pushOpts) { |
| 338 … | + if (err) return cb(err) |
| 339 … | + repo.setPushOptions(pushOpts) |
| 340 … | + var progress = progressObjects(options) |
325 | 341 … | |
326 | | - var hasPack = !updates.every(function (update) { |
327 | | - return update.new === null |
328 | | - }) |
329 | | - if (repo.uploadPack) { |
330 | | - if (!hasPack) { |
331 | | - repo.uploadPack(pull.values(updates), pull.empty(), done()) |
| 342 … | + var hasPack = !updates.every(function (update) { |
| 343 … | + return update.new === null |
| 344 … | + }) |
| 345 … | + if (repo.uploadPack) { |
| 346 … | + if (!hasPack) { |
| 347 … | + repo.uploadPack(pull.values(updates), pull.empty(), done()) |
| 348 … | + } else { |
| 349 … | + var idxCb = done() |
| 350 … | + pull(lines.passthrough, indexPack(function (err, idx, packfileFixed) { |
| 351 … | + if (err) return idxCb(err) |
| 352 … | + repo.uploadPack(pull.values(updates), pull.once({ |
| 353 … | + pack: pull( |
| 354 … | + packfileFixed, |
| 355 … | + |
| 356 … | + |
| 357 … | + pull.filter(function (buf) { |
| 358 … | + return buf.length |
| 359 … | + }) |
| 360 … | + ), |
| 361 … | + idx: idx |
| 362 … | + }), idxCb) |
| 363 … | + })) |
| 364 … | + } |
332 | 365 … | } else { |
333 | | - var idxCb = done() |
334 | | - pull(lines.passthrough, indexPack(function (err, idx, packfileFixed) { |
335 | | - if (err) return idxCb(err) |
336 | | - repo.uploadPack(pull.values(updates), pull.once({ |
337 | | - pack: pull( |
338 | | - packfileFixed, |
339 | | - |
340 | | - |
341 | | - pull.filter(function (buf) { |
342 | | - return buf.length |
343 | | - }) |
344 | | - ), |
345 | | - idx: idx |
346 | | - }), idxCb) |
347 | | - })) |
| 366 … | + repo.update(pull.values(updates), !hasPack ? pull.empty() : pull( |
| 367 … | + lines.passthrough, |
| 368 … | + pack.decode({ |
| 369 … | + verbosity: options.verbosity, |
| 370 … | + onHeader: function (numObjects) { |
| 371 … | + progress.setNumObjects(numObjects) |
| 372 … | + } |
| 373 … | + }, repo, done()), |
| 374 … | + progress |
| 375 … | + ), done()) |
348 | 376 … | } |
349 | | - } else { |
350 | | - repo.update(pull.values(updates), !hasPack ? pull.empty() : pull( |
351 | | - lines.passthrough, |
352 | | - pack.decode({ |
353 | | - verbosity: options.verbosity, |
354 | | - onHeader: function (numObjects) { |
355 | | - progress.setNumObjects(numObjects) |
356 | | - } |
357 | | - }, repo, done()), |
358 | | - progress |
359 | | - ), done()) |
| 377 … | + |
| 378 … | + done(function (err) { |
| 379 … | + cb(err || true) |
| 380 … | + }) |
360 | 381 … | } |
361 | | - |
362 | | - done(function (err) { |
363 | | - cb(err || true) |
364 | | - }) |
365 | 382 … | }) |
366 | 383 … | ) |
367 | 384 … | }, |
368 | 385 … | pull.once('unpack ok') |