[libgit2-glib] Fully bind GgitMergeOptions
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgit2-glib] Fully bind GgitMergeOptions
- Date: Sun, 9 Aug 2015 23:19:11 +0000 (UTC)
commit 9aa58592ade6935575898f15fb86f3496a37fdc1
Author: Jesse van den Kieboom <jessevdk gnome org>
Date: Mon Aug 10 01:18:47 2015 +0200
Fully bind GgitMergeOptions
libgit2-glib/ggit-merge-options.c | 235 ++++++++++++++++++++++++++++++++++---
libgit2-glib/ggit-merge-options.h | 41 ++++++-
2 files changed, 251 insertions(+), 25 deletions(-)
---
diff --git a/libgit2-glib/ggit-merge-options.c b/libgit2-glib/ggit-merge-options.c
index 85e9292..8ef2f52 100644
--- a/libgit2-glib/ggit-merge-options.c
+++ b/libgit2-glib/ggit-merge-options.c
@@ -23,6 +23,7 @@
struct _GgitMergeOptions
{
+ GgitDiffSimilarityMetric *metric;
git_merge_options merge_options;
};
@@ -76,43 +77,241 @@ ggit_merge_options_free (GgitMergeOptions *merge_options)
{
g_return_if_fail (merge_options != NULL);
+ if (merge_options->metric != NULL)
+ {
+ ggit_diff_similarity_metric_free (merge_options->metric);
+ merge_options->metric = NULL;
+ }
+
g_slice_free (GgitMergeOptions, merge_options);
}
/**
* ggit_merge_options_new:
- * @tree_flags: flags to consider when merging.
- * @rename_threshold: similarity to consider a file renamed (default 50).
- * @target_limit: maximum similarity sources to examine
- * (overrides the `merge.renameLimit` config) (default 200).
- * @metric: (allow-none): a #GgitDiffSimilarityMetric or %NULL to use internal metric.
- * @file_favor: a #GgitMergeFileFavor.
*
* Creates a new #GgitMergeOptions.
*
* Returns: a newly allocated #GgitMergeOptions.
*/
GgitMergeOptions *
-ggit_merge_options_new (GgitMergeTreeFlags tree_flags,
- guint rename_threshold,
- guint target_limit,
- GgitDiffSimilarityMetric *metric,
- GgitMergeFileFavor file_favor)
+ggit_merge_options_new ()
{
GgitMergeOptions *merge_options;
git_merge_options gmerge_options = GIT_MERGE_OPTIONS_INIT;
merge_options = g_slice_new (GgitMergeOptions);
-
- gmerge_options.tree_flags = (git_merge_tree_flag_t)tree_flags;
- gmerge_options.rename_threshold = rename_threshold;
- gmerge_options.target_limit = target_limit;
- gmerge_options.metric = _ggit_diff_similarity_metric_get_similarity_metric (metric);
- gmerge_options.file_favor = (git_merge_file_favor_t)file_favor;
-
merge_options->merge_options = gmerge_options;
return merge_options;
}
+/**
+ * ggit_merge_options_set_tree_flags:
+ * @merge_options: a #GgitMergeOptions.
+ * @tree_flags: the tree flags.
+ *
+ * Set the tree flags to use for merging.
+ *
+ **/
+void
+ggit_merge_options_set_tree_flags (GgitMergeOptions *merge_options,
+ GgitMergeTreeFlags tree_flags)
+{
+ g_return_if_fail (merge_options != NULL);
+ merge_options->merge_options.tree_flags = (git_merge_tree_flag_t)tree_flags;
+}
+
+/**
+ * ggit_merge_options_get_tree_flags:
+ * @merge_options: a #GgitMergeOptions.
+ *
+ * Get the tree flags to use for merging.
+ *
+ * Returns: the tree flags.
+ *
+ **/
+GgitMergeTreeFlags
+ggit_merge_options_get_tree_flags (GgitMergeOptions *merge_options)
+{
+ g_return_val_if_fail (merge_options != NULL, 0);
+ return (GgitMergeTreeFlags)merge_options->merge_options.tree_flags;
+}
+
+/**
+ * ggit_merge_options_set_rename_threshold:
+ * @merge_options: a #GgitMergeOptions.
+ * @rename_threshold: similarity to consider a file renamed.
+ *
+ * Set the rename threshold (defaults to 50). If %GGIT_MERGE_TREE_FIND_RENAMES
+ * is enabled, added files will be compared with deleted files to
+ * determine their similarity. Files that are more similar than the rename
+ * threshold (percentage-wise) will be treated as a rename.
+ *
+ **/
+void
+ggit_merge_options_set_rename_threshold (GgitMergeOptions *merge_options,
+ guint rename_threshold)
+{
+ g_return_if_fail (merge_options != NULL);
+ merge_options->merge_options.rename_threshold = rename_threshold;
+}
+
+/**
+ * ggit_merge_options_get_rename_threshold:
+ * @merge_options: a #GgitMergeOptions.
+ *
+ * Get the rename threshold (defaults to 50). If %GGIT_MERGE_TREE_FIND_RENAMES
+ * is enabled, added files will be compared with deleted files to
+ * determine their similarity. Files that are more similar than the rename
+ * threshold (percentage-wise) will be treated as a rename.
+ *
+ * Returns: the rename threshold.
+ *
+ **/
+guint
+ggit_merge_options_get_rename_threshold (GgitMergeOptions *merge_options)
+{
+ g_return_val_if_fail (merge_options != NULL, 0);
+ return merge_options->merge_options.rename_threshold;
+}
+
+/**
+ * ggit_merge_options_set_target_limit:
+ * @merge_options: a #GgitMergeOptions.
+ * @target_limit: maximum similarity source to examine for renames.
+ *
+ * Set the maximum number of similarity sources to examine for renames (defaults to 200).
+ * If the number of rename candidates (add / delete pairs) is greater than
+ * this value, inexact rename detection is aborted.
+ *
+ **/
+void
+ggit_merge_options_set_target_limit (GgitMergeOptions *merge_options,
+ guint target_limit)
+{
+ g_return_if_fail (merge_options != NULL);
+ merge_options->merge_options.target_limit = target_limit;
+}
+
+/**
+ * ggit_merge_options_get_target_limit:
+ * @merge_options: a #GgitMergeOptions.
+ *
+ * Get the maximum number of similarity sources to examine for renames (defaults to 200).
+ * If the number of rename candidates (add / delete pairs) is greater than
+ * this value, inexact rename detection is aborted.
+ *
+ * Returns: the target limit.
+ *
+ **/
+guint
+ggit_merge_options_get_target_limit (GgitMergeOptions *merge_options)
+{
+ g_return_val_if_fail (merge_options != NULL, 0);
+ return merge_options->merge_options.target_limit;
+}
+
+/**
+ * ggit_merge_options_set_similarity_metric:
+ * @merge_options: a #GgitMergeOptions.
+ * @metric: a #GgitSimilarityMetric.
+ *
+ * Set the similarity metric, or %NULL for the default similarity metric.
+ *
+ **/
+void
+ggit_merge_options_set_similarity_metric (GgitMergeOptions *merge_options,
+ GgitDiffSimilarityMetric *metric)
+{
+ g_return_if_fail (merge_options != NULL);
+
+ if (merge_options->metric)
+ {
+ ggit_diff_similarity_metric_free (merge_options->metric);
+ }
+
+ merge_options->metric = metric != NULL ? ggit_diff_similarity_metric_copy (metric) : NULL;
+ merge_options->merge_options.metric = _ggit_diff_similarity_metric_get_similarity_metric (metric);
+}
+
+/**
+ * ggit_merge_options_get_similarity_metric:
+ * @merge_options: a #GgitMergeOptions.
+ *
+ * Get the similarity metric.
+ *
+ * Returns: (transfer none): the similarity metric, or %NULL.
+ *
+ **/
+GgitDiffSimilarityMetric *
+ggit_merge_options_get_similarity_metric (GgitMergeOptions *merge_options)
+{
+ g_return_val_if_fail (merge_options != NULL, NULL);
+ return merge_options->metric;
+}
+
+/**
+ * ggit_merge_options_set_file_favor:
+ * @merge_options: a #GgitMergeOptions.
+ * @file_favor: the file favor.
+ *
+ * Set flags for handling conflicting content.
+ *
+ **/
+void
+ggit_merge_options_set_file_favor (GgitMergeOptions *merge_options,
+ GgitMergeFileFavor file_favor)
+{
+ g_return_if_fail (merge_options != NULL);
+ merge_options->merge_options.file_favor = (git_merge_file_favor_t)file_favor;
+}
+
+/**
+ * ggit_merge_options_get_file_favor:
+ * @merge_options: a #GgitMergeOptions.
+ *
+ * Get flags for handling conflicting content.
+ *
+ * Returns: the file favor.
+ *
+ **/
+GgitMergeFileFavor
+ggit_merge_options_get_file_favor (GgitMergeOptions *merge_options)
+{
+ g_return_val_if_fail (merge_options != NULL, 0);
+ return (GgitMergeFileFavor)merge_options->merge_options.file_favor;
+}
+
+/**
+ * ggit_merge_options_set_file_flags:
+ * @merge_options: a #GgitMergeOptions.
+ * @file_flags: the file flags.
+ *
+ * Set file merging flags.
+ *
+ **/
+void
+ggit_merge_options_set_file_flags (GgitMergeOptions *merge_options,
+ GgitMergeFileFlags file_flags)
+{
+ g_return_if_fail (merge_options != NULL);
+ merge_options->merge_options.file_flags = (git_merge_file_flags_t)file_flags;
+}
+
+/**
+ * ggit_merge_options_get_file_flags:
+ * @merge_options: a #GgitMergeOptions.
+ *
+ * Get file merging flags.
+ *
+ * Returns: the file merging flags.
+ *
+ **/
+GgitMergeFileFlags
+ggit_merge_options_get_file_flags (GgitMergeOptions *merge_options)
+{
+ g_return_val_if_fail (merge_options != NULL, 0);
+ return (GgitMergeFileFlags)merge_options->merge_options.file_flags;
+}
+
/* ex:set ts=8 noet: */
diff --git a/libgit2-glib/ggit-merge-options.h b/libgit2-glib/ggit-merge-options.h
index dbaea00..e8a3a92 100644
--- a/libgit2-glib/ggit-merge-options.h
+++ b/libgit2-glib/ggit-merge-options.h
@@ -35,17 +35,44 @@ G_BEGIN_DECLS
GType ggit_merge_options_get_type (void) G_GNUC_CONST;
const git_merge_options *
- _ggit_merge_options_get_merge_options (GgitMergeOptions *merge_options);
+ _ggit_merge_options_get_merge_options (GgitMergeOptions *merge_options);
-GgitMergeOptions *ggit_merge_options_copy (GgitMergeOptions *merge_options);
-void ggit_merge_options_free (GgitMergeOptions *merge_options);
+GgitMergeOptions *ggit_merge_options_copy (GgitMergeOptions *merge_options);
+void ggit_merge_options_free (GgitMergeOptions *merge_options);
-GgitMergeOptions *ggit_merge_options_new (GgitMergeTreeFlags tree_flags,
- guint
rename_threshold,
- guint target_limit,
- GgitDiffSimilarityMetric *metric,
+GgitMergeOptions *ggit_merge_options_new (void);
+
+void ggit_merge_options_set_tree_flags (GgitMergeOptions *merge_options,
+ GgitMergeTreeFlags tree_flags);
+
+GgitMergeTreeFlags ggit_merge_options_get_tree_flags (GgitMergeOptions *merge_options);
+
+void ggit_merge_options_set_rename_threshold (GgitMergeOptions *merge_options,
+ guint
rename_threshold);
+
+guint ggit_merge_options_get_rename_threshold (GgitMergeOptions *merge_options);
+
+void ggit_merge_options_set_target_limit (GgitMergeOptions *merge_options,
+ guint target_limit);
+
+guint ggit_merge_options_get_target_limit (GgitMergeOptions *merge_options);
+
+void ggit_merge_options_set_similarity_metric (GgitMergeOptions *merge_options,
+ GgitDiffSimilarityMetric *metric);
+
+GgitDiffSimilarityMetric *
+ ggit_merge_options_get_similarity_metric (GgitMergeOptions *merge_options);
+
+void ggit_merge_options_set_file_favor (GgitMergeOptions *merge_options,
GgitMergeFileFavor file_favor);
+GgitMergeFileFavor ggit_merge_options_get_file_favor (GgitMergeOptions *merge_options);
+
+void ggit_merge_options_set_file_flags (GgitMergeOptions *merge_options,
+ GgitMergeFileFlags file_flags);
+
+GgitMergeFileFlags ggit_merge_options_get_file_flags (GgitMergeOptions *merge_options);
+
G_DEFINE_AUTOPTR_CLEANUP_FUNC (GgitMergeOptions, ggit_merge_options_free)
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]