Skip to content

Instantly share code, notes, and snippets.

@kjnilsson
Created March 19, 2015 12:27
Show Gist options
  • Save kjnilsson/ab87d836a2102bfca6e8 to your computer and use it in GitHub Desktop.
Save kjnilsson/ab87d836a2102bfca6e8 to your computer and use it in GitHub Desktop.
libgit2sharp push repro
#r "libgit2sharp/Build/LibGit2Sharp.dll"
open System
open System.IO
open LibGit2Sharp
let stores = (Path.GetTempPath() + "local") |> Directory.CreateDirectory
let remote = (Path.GetTempPath() + "remote") |> Directory.CreateDirectory
let repoName = string (Guid.NewGuid())
let first = (remote.FullName + "//" + repoName) |> Directory.CreateDirectory
first.FullName
let second = (stores.FullName + "//" + repoName) |> Directory.CreateDirectory
second.FullName
let _ = new Repository (Repository.Init (first.FullName, true))
let repo = new Repository (Repository.Init (second.FullName, true))
let currentDefinition (repo : Repository) =
match repo.Head.Tip with
| null -> TreeDefinition (), []
| tip ->
TreeDefinition.From (tip.Tree), [tip]
let create fn (repo: Repository) =
let currentDef, parent = currentDefinition repo
use stream = new MemoryStream ("blah"B)
let odb = repo.ObjectDatabase
let blob = odb.CreateBlob (stream)
let newDef = currentDef.Add ("some/path/" + fn, blob, Mode.NonExecutableFile)
let tree = odb.CreateTree newDef
let signature = Signature ("trst", "test@test", DateTimeOffset.Now)
let commit =
odb.CreateCommit
(signature,
signature,
"test",
tree,
parent,
false)
repo.Reset(ResetMode.Soft, commit)
commit
let updateRemote (repo: Repository) (remotePath: Uri) =
let _ = repo.Network.Remotes.Add ("origin", "git://localhost/" + repoName)
repo.Branches.Update(repo.Head,
[| new Action<_> (fun (bu: BranchUpdater) ->
bu.Remote <- "origin"
bu.UpstreamBranch <- "refs/heads/master") |])
|> ignore
repo.Config.Set("push.default", "current", ConfigurationLevel.Local)
updateRemote repo (Uri "git://localhost")
//"git daemon --base-path=/var/folders/0_/18mv6y610d39ql2lyl5gtr_80000gn/T/ --enable=receive-pack --export-all"
create (string (Guid.NewGuid)) repo
repo.Network.Push(repo.Head)
repo.Network.Remotes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment