-// valac -o /tmp/ggit Git.vala --pkg libgit2-glib-1.0 --pkg libsoup
+// valac -o /tmp/ggit Git.vala --pkg libgit2-glib-1.0 --pkg libsoup-2.4 -pkg gee-0.8 -g
);
Ggit.init();
- var a = new Git.Repo("/home/alan/gitlive/web.Texon");
+
+ var a = new GitLive.Repo("/home/alan/gitlive/gitlive");
+ a.loadBranches();
a.fetchAll();
+ //
+ /*
+ var a = new GitLive.Repo("/home/alan/git/test1-clone");
+ //a.fetchAll();
+ var str = (new GLib.DateTime.now_utc()).format("%Y-%m-%d %H:%M:%S");
+ GLib.FileUtils.set_contents("/home/alan/git/test1-clone/test1", str);
+
+ var ix = a.repo.get_index();
+ ix.add_path("test1");
+ ix.write();
+ var treeoid = ix.write_tree();
+
+ var head = a.repo.get_head();
+ var parent = head.lookup() as Ggit.Commit;
+ Ggit.Commit[] parents = (parent == null) ?
+ new Ggit.Commit[] {} :
+ new Ggit.Commit[] { parent };
+
+ var tree = a.repo.lookup(treeoid,typeof (Ggit.Tree)) as Ggit.Tree;// odd format..
+
+ var sig = new Ggit.Signature.now("Alan Knowles", "alan@roojs.com");
+ a.repo.create_commit("HEAD", sig, sig, null, "test commit " + str, tree, parents);
+ */
+ // mmh.. no git add/commit in library...
+// string[] spawn_args = {"git", "commit", "-m", "test", "-a"};
+ //string[] spawn_env = Environ.get ();
+// Process.spawn_sync ("/home/alan/git/test1-clone", spawn_args, spawn_env, SpawnFlags.SEARCH_PATH, null);
+
+ a.pushAll();
}
-namespace Git {
+namespace GitLive {
public class Repo : Object {
- Ggit.Repository repo;
+ public Ggit.Repository repo;
Callbacks callbacks;
public Repo(string path)
this.callbacks = new Callbacks(this);
}
+
+ Gee.ArrayList<Ggit.Branch> branches = null;
+ public void loadBranches()
+ {
+ this.branches = new Gee.ArrayList<Ggit.Branch>();
+ var r = this.repo.enumerate_branches(Ggit.BranchType.LOCAL);
+
+
+
+
+ while (r.next()) {
+ var br = r.get() as Ggit.Branch;
+ var head = this.repo.revparse("refs/heads/" + br.get_name() ).get_id();
+ var rhead = this.repo.revparse(br.get_upstream().get_name() ).get_id();
+ GLib.debug("got branch: name = %s upstream = %s oid = %s ",
+ br.get_name(), br.get_upstream().get_name(),
+ head.to_string());
+ this.branches.add(br);
+
+ }
+
+
+
+ }
+ Ggit.Branch? getBranch(string remote_name)
+ {
+ GLib.debug("lookup %s", remote_name);
+ foreach(var br in this.branches) {
+ if (br.get_upstream().get_name() == remote_name) {
+ return br;
+ }
+
+ }
+ return null;
+
+ }
+
+
+
public void fetchAll()
{
// remotes probably will not work with http auth..
GLib.debug("Got Error Message: %s", e.message);
return;
}
+
+ var heads = r.list();
+ foreach(var rh in heads) {
+ var br = this.getBranch(rh.get_name());
+
+ GLib.debug("got heads: name=%s rev=%s localrev=%s",
+ rh.get_name(),
+ rh.get_oid().to_string(),
+ br == null ? "?": this.repo.revparse(br.get_name() ).get_id().to_string()
+ );
+
+ }
+
+
+
GLib.debug("getting specs '%s'", n);
}
var options = new Ggit.FetchOptions();
options.set_remote_callbacks(this.callbacks);
- r.download(far, options);
-
-
+ //yield Async.thread(() => {
+
+ r.download(far, options);
+ //});
+ r.disconnect();
//r.download(
}
}
+
+
+
public void pushAll()
{
// remotes probably will not work with http auth..
try {
string[] h = { "a = 1" };
- r.connect(Ggit.Direction.PUSH, this.callbacks, null, null);
+ r.connect(Ggit.Direction.PUSH, this.callbacks, null, null);
} catch (Error e) {
GLib.debug("Got Error Message: %s", e.message);
return;
}
- GLib.debug("getting specs '%s'", n);
-
-
- var far = r.get_push_specs();
+ //GLib.debug("getting specs '%s'", n);
+ /*
+
+ this.repo.add_remote_push(
+ "origin",
+ "+%s:%s".printf(head.get_shorthand(),head.get_name())
+ );
+ */
+ var head = this.repo.get_head();
+ string[] far = {};
+ far += "+%s:%s".printf(head.get_name(),head.get_name());
foreach(var rs in far) {
GLib.debug("got remote spec: %s", rs);
}
-
- r.update_tips(this.callbacks, true,);
-
+
+ var popts = new Ggit.PushOptions();
+ popts.callbacks = this.callbacks;
+ GLib.debug("Push?");
+ r.upload(far,popts);
+ GLib.debug("Push done?");
+ r.disconnect();
//r.download(
var lines = str.split("\n");
for(var i=0; i< lines.length; i++) {
// assumes one line per entry.. if not we are buggered...
- GLib.debug("got %s" , lines[i]);
+ //GLib.debug("got %s" , lines[i]);
var bits = Regex.split_simple ("[ \t]+", lines[i].strip());
if (bits.length < 6 || bits[0] != "machine" || bits[1] != domain) {