summaryrefslogtreecommitdiffstats
path: root/extra/git2/src/cherrypick.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
commit10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87 (patch)
treebdffd5d80c26cf4a7a518281a204be1ace85b4c1 /extra/git2/src/cherrypick.rs
parentReleasing progress-linux version 1.70.0+dfsg1-9~progress7.99u1. (diff)
downloadrustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.tar.xz
rustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.zip
Merging upstream version 1.70.0+dfsg2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'extra/git2/src/cherrypick.rs')
-rw-r--r--extra/git2/src/cherrypick.rs72
1 files changed, 72 insertions, 0 deletions
diff --git a/extra/git2/src/cherrypick.rs b/extra/git2/src/cherrypick.rs
new file mode 100644
index 000000000..659b73089
--- /dev/null
+++ b/extra/git2/src/cherrypick.rs
@@ -0,0 +1,72 @@
+use std::mem;
+
+use crate::build::CheckoutBuilder;
+use crate::merge::MergeOptions;
+use crate::raw;
+use std::ptr;
+
+/// Options to specify when cherry picking
+pub struct CherrypickOptions<'cb> {
+ mainline: u32,
+ checkout_builder: Option<CheckoutBuilder<'cb>>,
+ merge_opts: Option<MergeOptions>,
+}
+
+impl<'cb> CherrypickOptions<'cb> {
+ /// Creates a default set of cherrypick options
+ pub fn new() -> CherrypickOptions<'cb> {
+ CherrypickOptions {
+ mainline: 0,
+ checkout_builder: None,
+ merge_opts: None,
+ }
+ }
+
+ /// Set the mainline value
+ ///
+ /// For merge commits, the "mainline" is treated as the parent.
+ pub fn mainline(&mut self, mainline: u32) -> &mut Self {
+ self.mainline = mainline;
+ self
+ }
+
+ /// Set the checkout builder
+ pub fn checkout_builder(&mut self, cb: CheckoutBuilder<'cb>) -> &mut Self {
+ self.checkout_builder = Some(cb);
+ self
+ }
+
+ /// Set the merge options
+ pub fn merge_opts(&mut self, merge_opts: MergeOptions) -> &mut Self {
+ self.merge_opts = Some(merge_opts);
+ self
+ }
+
+ /// Obtain the raw struct
+ pub fn raw(&mut self) -> raw::git_cherrypick_options {
+ unsafe {
+ let mut checkout_opts: raw::git_checkout_options = mem::zeroed();
+ raw::git_checkout_init_options(&mut checkout_opts, raw::GIT_CHECKOUT_OPTIONS_VERSION);
+ if let Some(ref mut cb) = self.checkout_builder {
+ cb.configure(&mut checkout_opts);
+ }
+
+ let mut merge_opts: raw::git_merge_options = mem::zeroed();
+ raw::git_merge_init_options(&mut merge_opts, raw::GIT_MERGE_OPTIONS_VERSION);
+ if let Some(ref opts) = self.merge_opts {
+ ptr::copy(opts.raw(), &mut merge_opts, 1);
+ }
+
+ let mut cherrypick_opts: raw::git_cherrypick_options = mem::zeroed();
+ raw::git_cherrypick_init_options(
+ &mut cherrypick_opts,
+ raw::GIT_CHERRYPICK_OPTIONS_VERSION,
+ );
+ cherrypick_opts.mainline = self.mainline;
+ cherrypick_opts.checkout_opts = checkout_opts;
+ cherrypick_opts.merge_opts = merge_opts;
+
+ cherrypick_opts
+ }
+ }
+}