| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|\
| |
| | |
Use buffered IO for decoding index files.
|
| |
| |
| |
| | |
This reduces syscall CPU time from >40% to <10% in my local repository.
|
|\ \
| | |
| | | |
plumbing: protocol, fix handling multiple ACK on upload-pack and test…
|
| | | |
|
|\ \ \
| | | |
| | | | |
transport/server: add asClient parameter
|
| |/ /
| | |
| | |
| | |
| | |
| | | |
server.NewClient returns a server that acts as a client.
This makes it working seamlessly when registering a server directly with
`client.InstallProtocol`.
|
|\ \ \
| |/ /
|/| | |
improve delete support on push
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* server: implement delete-refs and announce it.
* remote: check if server announced delete-refs before trying
to delete and fail fast if it does not.
Note that the client does not need no send 'delete-refs' back
to the server to be able to delete references:
```
delete-refs
-----------
If the server sends back the 'delete-refs' capability, it means that
it is capable of accepting a zero-id value as the target
value of a reference update. It is not sent back by the client, it
simply informs the client that it can be sent zero-id values
to delete references.
```
So our server implementation does not check if the client sent
delete-refs back, it just accepts deletes if it receives them.
|
|\ \
| |/
|/| |
plumbing: protocol, fix handling multiple ACK on upload-pack
|
| | |
|
|\ \
| | |
| | | |
transport/file: avoid race with Command.Wait, fixes #463
|
| | |
| | |
| | |
| | |
| | |
| | | |
Pipe returned by Command.StderrPipe() has a race with Read and
Command.Wait(). We use a io.Pipe() instead and ensure it is closed
after Wait().
|
| |/
| |
| |
| |
| |
| |
| | |
We only use the first line of error output. So we use a channel with
a single byte buffer and read the first line from stderr. Further
output is discarded, as well as any further I/O error, which might
be expected when closing the pipe (command finished).
|
|/
|
|
|
| |
Implemented according to git shorten_unambiguous_ref.
See: https://github.com/git/git/blob/e0aaa1b6532cfce93d87af9bc813fb2e7a7ce9d7/refs.c#L1030
|
|\
| |
| | |
transport/ssh: allow passing SSH options
|
| |
| |
| |
| |
| | |
A global *ssh.ClientConfig override can be set. It will be
use to override values of each SSH session.
|
| |
| |
| |
| |
| | |
Adds the possibility of passing options to SSH transport.
Options have the form of functions modifying ssh.ClientConfig.
|
| | |
|
| | |
|
| | |
|
|/
|
|
|
|
|
|
|
| |
GitHub has started using a non-standard capability "early-capabilities"
with agent=git/github-g3daa19f21. This is breaking all go-git operations
on GitHub.
This commit removes validation for known capabilities, so that we can
use non-standard capabilities safely.
|
|
|
|
| |
- If we don't ignore submodules in trees, when we tried to perform a push, revlist.Objects returned hashes that was from submodules, causing an "object not found" error in packfile generation.
|
| |
|
|\
| |
| | |
Adds .gitignore support
|
| | |
|
| | |
|
|\ \
| | |
| | | |
fix naming of NewCommit{Pre,Post}Iterator
|
| |/
| |
| |
| |
| | |
Use Iter suffix, just as all other iterators in the project.
Use Preorder and Postorder to be more clear.
|
|\ \
| | |
| | | |
fix gofmt
|
| |/ |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
"ERR access denied or repository not exported:"
is now detected as transport.ErrRepositoryNotFound, since
that's what git-daemon returns when --informative-errors is
not used.
|
| | |
|
| | |
|
| | |
|
|/
|
|
|
|
| |
* at low level, ReceivePack must close its stream to the
server to signal it has finished.
* remote.go: Close() must be called on session.
|
|\
| |
| | |
storage/filesystem: call initialization explicitly, fixes #408
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
filesystem.Storage was initializing the gitdir (creating objects
and refs) on NewStorage. But this should be done only on init and
clone operations, not on open.
Now there is a new interface storer.Initializer that storers can
implement if they need any initialization step before init or clone.
filesystem.Storage is one of such implementations.
git.Init and git.Clone now call to the storer Init() method if it
does implement it. Otherwise, it just ignores initialization.
|
|\ \
| |/
|/| |
packfile: A copy operation cannot be bigger than 64kb
|
| |
| |
| |
| | |
More info here: https://github.com/git/git/blob/f7466e94375b3be27f229c78873f0acf8301c0a5/diff-delta.c#L428
|
|/ |
|
|
|
|
| |
Implemented algorithm described in "File System Support for Delta Compression" paper, from "Joshua P. MacDonald".
|
|
|
|
|
|
|
|
|
| |
- Added Patch interface
- Added a Unified Diff encoder from Patches
- Added Change method to generate Patches
- Added Changes method to generate Patches
- Added Tree method to generate Patches
- Added Commit method to generate Patches
|
| |
|
|
|
|
| |
Two endpoints are not equals between them, even if they were generated using the same url or path.
|
| |
|
| |
|