diff --git a/builder/builder-source-bzr.c b/builder/builder-source-bzr.c
index 89a6b1e2..d165b309 100644
--- a/builder/builder-source-bzr.c
+++ b/builder/builder-source-bzr.c
@@ -37,6 +37,7 @@ struct BuilderSourceBzr {
BuilderSource parent;
char *url;
+ char *revision;
};
typedef struct {
@@ -48,6 +49,7 @@ G_DEFINE_TYPE (BuilderSourceBzr, builder_source_bzr, BUILDER_TYPE_SOURCE);
enum {
PROP_0,
PROP_URL,
+ PROP_REVISION,
LAST_PROP
};
@@ -57,6 +59,7 @@ builder_source_bzr_finalize (GObject *object)
BuilderSourceBzr *self = (BuilderSourceBzr *)object;
g_free (self->url);
+ g_free (self->revision);
G_OBJECT_CLASS (builder_source_bzr_parent_class)->finalize (object);
}
@@ -75,6 +78,10 @@ builder_source_bzr_get_property (GObject *object,
g_value_set_string (value, self->url);
break;
+ case PROP_REVISION:
+ g_value_set_string (value, self->revision);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -95,6 +102,11 @@ builder_source_bzr_set_property (GObject *object,
self->url = g_value_dup_string (value);
break;
+ case PROP_REVISION:
+ g_free (self->revision);
+ self->revision = g_value_dup_string (value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -210,6 +222,14 @@ builder_source_bzr_extract (BuilderSource *source,
"branch", "--stacked", mirror_dir_path, dest_path, "--use-existing-dir", NULL))
return FALSE;
+ if (self->revision)
+ {
+ g_autofree char *revarg = g_strdup_printf ("-r%s", self->revision);
+ if (!bzr (dest, NULL, error,
+ "revert", revarg, NULL))
+ return FALSE;
+ }
+
return TRUE;
}
@@ -223,6 +243,7 @@ builder_source_bzr_checksum (BuilderSource *source,
g_autoptr(GError) error = NULL;
builder_cache_checksum_str (cache, self->url);
+ builder_cache_checksum_str (cache, self->revision);
current_commit = get_current_commit (self, context, &error);
if (current_commit)
@@ -252,6 +273,13 @@ builder_source_bzr_class_init (BuilderSourceBzrClass *klass)
"",
NULL,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_REVISION,
+ g_param_spec_string ("revision",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
}
static void
diff --git a/doc/xdg-app-builder.xml b/doc/xdg-app-builder.xml
index a2a8c56a..7bca3cdf 100644
--- a/doc/xdg-app-builder.xml
+++ b/doc/xdg-app-builder.xml
@@ -328,6 +328,10 @@
URL of the bzr repostiory
+
+
+ A specific revision to use in the branch
+
Directory inside the source dir where the repository will be checked out.