summaryrefslogtreecommitdiffstats
path: root/vendor/gix-refspec/src/instruction.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gix-refspec/src/instruction.rs')
-rw-r--r--vendor/gix-refspec/src/instruction.rs68
1 files changed, 68 insertions, 0 deletions
diff --git a/vendor/gix-refspec/src/instruction.rs b/vendor/gix-refspec/src/instruction.rs
new file mode 100644
index 000000000..990d0debc
--- /dev/null
+++ b/vendor/gix-refspec/src/instruction.rs
@@ -0,0 +1,68 @@
+use bstr::BStr;
+
+use crate::{parse::Operation, Instruction};
+
+impl Instruction<'_> {
+ /// Derive the mode of operation from this instruction.
+ pub fn operation(&self) -> Operation {
+ match self {
+ Instruction::Push(_) => Operation::Push,
+ Instruction::Fetch(_) => Operation::Fetch,
+ }
+ }
+}
+
+/// Note that all sources can either be a ref-name, partial or full, or a rev-spec, unless specified otherwise, on the local side.
+/// Destinations can only be a partial or full ref names on the remote side.
+#[derive(PartialOrd, Ord, PartialEq, Eq, Copy, Clone, Hash, Debug)]
+pub enum Push<'a> {
+ /// Push all local branches to the matching destination on the remote, which has to exist to be updated.
+ AllMatchingBranches {
+ /// If true, allow non-fast-forward updates of the matched destination branch.
+ allow_non_fast_forward: bool,
+ },
+ /// Delete the destination ref or glob pattern, with only a single `*` allowed.
+ Delete {
+ /// The reference or pattern to delete on the remote.
+ ref_or_pattern: &'a BStr,
+ },
+ /// Push a single ref or refspec to a known destination ref.
+ Matching {
+ /// The source ref or refspec to push. If pattern, it contains a single `*`.
+ /// Examples are refnames like `HEAD` or `refs/heads/main`, or patterns like `refs/heads/*`.
+ src: &'a BStr,
+ /// The ref to update with the object from `src`. If `src` is a pattern, this is a pattern too.
+ /// Examples are refnames like `HEAD` or `refs/heads/main`, or patterns like `refs/heads/*`.
+ dst: &'a BStr,
+ /// If true, allow non-fast-forward updates of `dest`.
+ allow_non_fast_forward: bool,
+ },
+}
+
+/// Any source can either be a ref name (full or partial) or a fully spelled out hex-sha for an object, on the remote side.
+///
+/// Destinations can only be a partial or full ref-names on the local side.
+#[derive(PartialOrd, Ord, PartialEq, Eq, Copy, Clone, Hash, Debug)]
+pub enum Fetch<'a> {
+ /// Fetch a ref or refs, without updating local branches.
+ Only {
+ /// The partial or full ref name to fetch on the remote side or the full object hex-name, without updating the local side.
+ /// Note that this may not be a glob pattern, as those need to be matched by a destination which isn't present here.
+ src: &'a BStr,
+ },
+ /// Exclude a single ref.
+ Exclude {
+ /// A single partial or full ref name to exclude on the remote, or a pattern with a single `*`. It cannot be a spelled out object hash.
+ src: &'a BStr,
+ },
+ /// Fetch from `src` and update the corresponding destination branches in `dst` accordingly.
+ AndUpdate {
+ /// The ref name to fetch on the remote side, or a pattern with a single `*` to match against.
+ src: &'a BStr,
+ /// The local destination to update with what was fetched, or a pattern whose single `*` will be replaced with the matching portion
+ /// of the `*` from `src`.
+ dst: &'a BStr,
+ /// If true, allow non-fast-forward updates of `dest`.
+ allow_non_fast_forward: bool,
+ },
+}