]> source.dussan.org Git - jgit.git/commit
Batch reference updates together for storage 54/5254/2
authorShawn O. Pearce <spearce@spearce.org>
Tue, 22 May 2012 23:45:06 +0000 (16:45 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Tue, 22 May 2012 23:45:06 +0000 (16:45 -0700)
commit17be66acdbe662b42a263be77c435945902df968
tree7aa8eba2102d90bee3c0044f65f0903ada077402
parentd8d649a43eb6b72f97979112066378748d0cabaf
Batch reference updates together for storage

clone, fetch and push can all update multiple references in a single
command invocation. Rather than performing sequential iteration
of each reference change inside of the application code, push this
down into the reference database where the implementation can take
advantage of the batch size and optimize itself.

For the local filesystem implementation the obvious optimization
is to write a packed-refs file when the repository is completely
empty. The initial clone, fetch or push into the destination may
have hundreds of new references. Writing all of these as loose
files is not efficient. This optimization is not implemented in
this commit and is left as an exercise for the reader to supply
in a future commit to JGit.

To make the API changes simple, define the BatchRefUpdate type and
implementation using the existing sequential behavior.

Change-Id: I8e1674f091e05e24e3ff56ccbc687a6d18a6a61e
org.eclipse.jgit/src/org/eclipse/jgit/lib/BatchRefUpdate.java [new file with mode: 0644]
org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommand.java