diff --git a/Makefile-src.am b/Makefile-src.am index 80763968..bdc10484 100644 --- a/Makefile-src.am +++ b/Makefile-src.am @@ -54,6 +54,7 @@ ostree_SOURCES = src/main.c \ src/ot-builtin-link-file.c \ src/ot-builtin-log.c \ src/ot-builtin-run-triggers.c \ + src/ot-builtin-rev-parse.c \ src/ot-builtin-show.c \ $(NULL) ostree_CFLAGS = -I$(srcdir)/src -I$(srcdir)/src/libostree -I$(srcdir)/src/libotutil -DLOCALEDIR=\"$(datadir)/locale\" $(GIO_UNIX_CFLAGS) diff --git a/src/main.c b/src/main.c index 5936fc3f..3bf9824c 100644 --- a/src/main.c +++ b/src/main.c @@ -34,6 +34,7 @@ static OstreeBuiltin builtins[] = { { "link-file", ostree_builtin_link_file, 0 }, { "log", ostree_builtin_log, 0 }, { "fsck", ostree_builtin_fsck, 0 }, + { "rev-parse", ostree_builtin_rev_parse, 0 }, { "run-triggers", ostree_builtin_run_triggers, 0 }, { "show", ostree_builtin_show, 0 }, { NULL } diff --git a/src/ot-builtin-rev-parse.c b/src/ot-builtin-rev-parse.c new file mode 100644 index 00000000..7b24b7eb --- /dev/null +++ b/src/ot-builtin-rev-parse.c @@ -0,0 +1,78 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2011 Colin Walters + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Author: Colin Walters + */ + +#include "config.h" + +#include "ot-builtins.h" +#include "ostree.h" + +#include + +static char *repo_path; + +static GOptionEntry options[] = { + { "repo", 0, 0, G_OPTION_ARG_FILENAME, &repo_path, "Repository path", "repo" }, + { NULL } +}; + +gboolean +ostree_builtin_rev_parse (int argc, char **argv, const char *prefix, GError **error) +{ + GOptionContext *context; + gboolean ret = FALSE; + OstreeRepo *repo = NULL; + const char *rev = "master"; + char *resolved_rev = NULL; + GVariant *variant = NULL; + char *formatted_variant = NULL; + + context = g_option_context_new ("- Output the target of a rev"); + g_option_context_add_main_entries (context, options, NULL); + + if (!g_option_context_parse (context, &argc, &argv, error)) + goto out; + + if (repo_path == NULL) + repo_path = "."; + + repo = ostree_repo_new (repo_path); + if (!ostree_repo_check (repo, error)) + goto out; + + if (argc > 1) + rev = argv[1]; + + if (!ostree_repo_resolve_rev (repo, rev, &resolved_rev, error)) + goto out; + + g_print ("%s\n", resolved_rev); + + ret = TRUE; + out: + g_free (resolved_rev); + if (context) + g_option_context_free (context); + g_clear_object (&repo); + if (variant) + g_variant_unref (variant); + g_free (formatted_variant); + return ret; +} diff --git a/src/ot-builtins.h b/src/ot-builtins.h index ea0dedac..e4d6d911 100644 --- a/src/ot-builtins.h +++ b/src/ot-builtins.h @@ -44,6 +44,7 @@ gboolean ostree_builtin_link_file (int argc, char **argv, const char *prefix, GE gboolean ostree_builtin_run_triggers (int argc, char **argv, const char *prefix, GError **error); gboolean ostree_builtin_fsck (int argc, char **argv, const char *prefix, GError **error); gboolean ostree_builtin_show (int argc, char **argv, const char *prefix, GError **error); +gboolean ostree_builtin_rev_parse (int argc, char **argv, const char *prefix, GError **error); G_END_DECLS diff --git a/tests/t0002-commit-one.sh b/tests/t0002-commit-one.sh index 68c76bf3..0978d56e 100755 --- a/tests/t0002-commit-one.sh +++ b/tests/t0002-commit-one.sh @@ -22,7 +22,7 @@ set -e . libtest.sh -echo '1..3' +echo '1..4' mkdir files cd files @@ -36,3 +36,5 @@ ostree commit $repo -s "Test Commit" -m "Commit body" --add=yy echo 'ok commit' ostree fsck -q $repo echo 'ok fsck' +ostree rev-parse +echo 'ok rev-parse'