Struct mit_commit::CommitMessage
source · pub struct CommitMessage<'a> { /* private fields */ }
Expand description
A CommitMessage
, the primary entry point to the library
Implementations§
source§impl<'a> CommitMessage<'a>
impl<'a> CommitMessage<'a>
sourcepub fn from_fragments(
fragments: Vec<Fragment<'_>>,
scissors: Option<Scissors<'_>>
) -> Self
pub fn from_fragments( fragments: Vec<Fragment<'_>>, scissors: Option<Scissors<'_>> ) -> Self
Convert from Fragment
back into a full CommitMessage
Get back to a CommitMessage
from an ast, usually after you’ve been
editing the text.
Examples
use indoc::indoc;
use mit_commit::{Bodies, CommitMessage, Subject};
let message = CommitMessage::from(indoc!(
"
Update bashrc to include kubernetes completions
This should make it easier to deploy things for the developers.
Benchmarked with Hyperfine, no noticable performance decrease.
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Datum: Sat Jun 27 21:40:14 2020 +0200
;
; Auf Branch master
;
; Initialer Commit
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: .bashrc
;"
));
assert_eq!(
CommitMessage::from_fragments(message.get_ast(), message.get_scissors()),
message,
)
sourcepub fn add_trailer(&self, trailer: Trailer<'_>) -> Self
pub fn add_trailer(&self, trailer: Trailer<'_>) -> Self
A helper method to let you insert Trailer
Examples
use indoc::indoc;
use mit_commit::{CommitMessage, Trailer};
let commit = CommitMessage::from(indoc!(
"
Example Commit Message
This is an example commit message for linting
Relates-to: #153
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Auf Branch main
; Ihr Branch ist auf demselben Stand wie 'origin/main'.
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: file
;
"
));
assert_eq!(
String::from(commit.add_trailer(Trailer::new(
"Co-authored-by".into(),
"Test Trailer <test@example.com>".into()
))),
String::from(CommitMessage::from(indoc!(
"
Example Commit Message
This is an example commit message for linting
Relates-to: #153
Co-authored-by: Test Trailer <test@example.com>
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Auf Branch main
; Ihr Branch ist auf demselben Stand wie 'origin/main'.
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: file
;
"
)))
);
sourcepub fn insert_after_last_full_body(&self, fragment: Vec<Fragment<'_>>) -> Self
pub fn insert_after_last_full_body(&self, fragment: Vec<Fragment<'_>>) -> Self
Insert text in the place you’re most likely to want it
In the case you don’t have any full Body
in there, it inserts it at
the top of the commit, in the Subject
line.
Examples
use mit_commit::{Fragment, Body, CommitMessage, Comment};
let ast: Vec<Fragment> = vec![
Fragment::Body(Body::from("Add file")),
Fragment::Body(Body::default()),
Fragment::Body(Body::from("Looks-like-a-trailer: But isn\'t")),
Fragment::Body(Body::default()),
Fragment::Body(Body::from("This adds file primarily for demonstration purposes. It might not be\nuseful as an actual commit, but it\'s very useful as a example to use in\ntests.")),
Fragment::Body(Body::default()),
Fragment::Body(Body::from("Relates-to: #128")),
Fragment::Body(Body::default()),
Fragment::Comment(Comment::from("# Short (50 chars or less) summary of changes\n#\n# More detailed explanatory text, if necessary. Wrap it to\n# about 72 characters or so. In some contexts, the first\n# line is treated as the subject of an email and the rest of\n# the text as the body. The blank line separating the\n# summary from the body is critical (unless you omit the body\n# entirely); tools like rebase can get confused if you run\n# the two together.\n#\n# Further paragraphs come after blank lines.\n#\n# - Bullet points are okay, too\n#\n# - Typically a hyphen or asterisk is used for the bullet,\n# preceded by a single space, with blank lines in\n# between, but conventions vary here")),
Fragment::Body(Body::default()),
Fragment::Comment(Comment::from("# Bitte geben Sie eine Commit-Beschreibung f\u{fc}r Ihre \u{e4}nderungen ein. Zeilen,\n# die mit \'#\' beginnen, werden ignoriert, und eine leere Beschreibung\n# bricht den Commit ab.\n#\n# Auf Branch main\n# Ihr Branch ist auf demselben Stand wie \'origin/main\'.\n#\n# Zum Commit vorgemerkte \u{e4}nderungen:\n#\tneue Datei: file\n#"))
];
let commit = CommitMessage::from_fragments(ast, None);
assert_eq!(commit.insert_after_last_full_body(vec![Fragment::Body(Body::from("Relates-to: #656"))]).get_ast(), vec![
Fragment::Body(Body::from("Add file")),
Fragment::Body(Body::default()),
Fragment::Body(Body::from("Looks-like-a-trailer: But isn\'t")),
Fragment::Body(Body::default()),
Fragment::Body(Body::from("This adds file primarily for demonstration purposes. It might not be\nuseful as an actual commit, but it\'s very useful as a example to use in\ntests.")),
Fragment::Body(Body::default()),
Fragment::Body(Body::from("Relates-to: #128\nRelates-to: #656")),
Fragment::Body(Body::default()),
Fragment::Comment(Comment::from("# Short (50 chars or less) summary of changes\n#\n# More detailed explanatory text, if necessary. Wrap it to\n# about 72 characters or so. In some contexts, the first\n# line is treated as the subject of an email and the rest of\n# the text as the body. The blank line separating the\n# summary from the body is critical (unless you omit the body\n# entirely); tools like rebase can get confused if you run\n# the two together.\n#\n# Further paragraphs come after blank lines.\n#\n# - Bullet points are okay, too\n#\n# - Typically a hyphen or asterisk is used for the bullet,\n# preceded by a single space, with blank lines in\n# between, but conventions vary here")),
Fragment::Body(Body::default()),
Fragment::Comment(Comment::from("# Bitte geben Sie eine Commit-Beschreibung f\u{fc}r Ihre \u{e4}nderungen ein. Zeilen,\n# die mit \'#\' beginnen, werden ignoriert, und eine leere Beschreibung\n# bricht den Commit ab.\n#\n# Auf Branch main\n# Ihr Branch ist auf demselben Stand wie \'origin/main\'.\n#\n# Zum Commit vorgemerkte \u{e4}nderungen:\n#\tneue Datei: file\n#"))
])
sourcepub fn get_subject(&self) -> Subject<'a>
pub fn get_subject(&self) -> Subject<'a>
Get the Subject
line from the CommitMessage
It’s possible to get this from the ast, but it’s a bit of a faff, so this is a convenience method
Examples
use indoc::indoc;
use mit_commit::{Bodies, CommitMessage, Subject};
let message = CommitMessage::from(indoc!(
"
Update bashrc to include kubernetes completions
This should make it easier to deploy things for the developers.
Benchmarked with Hyperfine, no noticable performance decrease.
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Datum: Sat Jun 27 21:40:14 2020 +0200
;
; Auf Branch master
;
; Initialer Commit
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: .bashrc
;"
));
assert_eq!(
message.get_subject(),
Subject::from("Update bashrc to include kubernetes completions")
)
sourcepub fn get_ast(&self) -> Vec<Fragment<'_>>
pub fn get_ast(&self) -> Vec<Fragment<'_>>
Get the underlying data structure that represents the CommitMessage
This is the underlying datastructure for the CommitMessage
. You
might want this to create a complicated linter, or modify the
CommitMessage
to your liking.
Notice how it doesn’t include the Scissors
section.
Examples
use indoc::indoc;
use mit_commit::{Body, CommitMessage, Fragment, Trailer, Trailers, Comment};
let message = CommitMessage::from(indoc!(
"
Add file
Looks-like-a-trailer: But isn't
This adds file primarily for demonstration purposes. It might not be
useful as an actual commit, but it's very useful as a example to use in
tests.
Relates-to: #128
Relates-to: #129
; Short (50 chars or less) summary of changes
;
; More detailed explanatory text, if necessary. Wrap it to
; about 72 characters or so. In some contexts, the first
; line is treated as the subject of an email and the rest of
; the text as the body. The blank line separating the
; summary from the body is critical (unless you omit the body
; entirely); tools like rebase can get confused if you run
; the two together.
;
; Further paragraphs come after blank lines.
;
; - Bullet points are okay, too
;
; - Typically a hyphen or asterisk is used for the bullet,
; preceded by a single space, with blank lines in
; between, but conventions vary here
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Auf Branch main
; Ihr Branch ist auf demselben Stand wie 'origin/main'.
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: file
;
; ------------------------ >8 ------------------------
; \u{00E4}ndern oder entfernen Sie nicht die obige Zeile.
; Alles unterhalb von ihr wird ignoriert.
diff --git a/file b/file
new file mode 100644
index 0000000..e69de29
"
));
let ast = vec![
Fragment::Body(Body::from("Add file")),
Fragment::Body(Body::default()),
Fragment::Body(Body::from("Looks-like-a-trailer: But isn't")),
Fragment::Body(Body::default()),
Fragment::Body(Body::from("This adds file primarily for demonstration purposes. It might not be\nuseful as an actual commit, but it\'s very useful as a example to use in\ntests.")),
Fragment::Body(Body::default()),
Fragment::Body(Body::from("Relates-to: #128\nRelates-to: #129")),
Fragment::Body(Body::default()),
Fragment::Comment(Comment::from("; Short (50 chars or less) summary of changes\n;\n; More detailed explanatory text, if necessary. Wrap it to\n; about 72 characters or so. In some contexts, the first\n; line is treated as the subject of an email and the rest of\n; the text as the body. The blank line separating the\n; summary from the body is critical (unless you omit the body\n; entirely); tools like rebase can get confused if you run\n; the two together.\n;\n; Further paragraphs come after blank lines.\n;\n; - Bullet points are okay, too\n;\n; - Typically a hyphen or asterisk is used for the bullet,\n; preceded by a single space, with blank lines in\n; between, but conventions vary here")),
Fragment::Body(Body::default()),
Fragment::Comment(Comment::from("; Bitte geben Sie eine Commit-Beschreibung für Ihre änderungen ein. Zeilen,\n; die mit \';\' beginnen, werden ignoriert, und eine leere Beschreibung\n; bricht den Commit ab.\n;\n; Auf Branch main\n; Ihr Branch ist auf demselben Stand wie \'origin/main\'.\n;\n; Zum Commit vorgemerkte änderungen:\n; neue Datei: file\n;"))
];
assert_eq!(message.get_ast(), ast)
sourcepub fn get_body(&self) -> Bodies<'_>
pub fn get_body(&self) -> Bodies<'_>
Get the Bodies
from the CommitMessage
This gets the Bodies
from the CommitMessage
in easy to use
paragraphs, we add in blank bodies because starting a new paragraph
is a visual delimiter so we want to make that easy to detect.
It doesn’t include the Subject
line, but if there’s a blank line
after it (as is recommended by the manual), the Bodies
will
start with a new empty Body
.
Examples
use indoc::indoc;
use mit_commit::{Bodies, Body, CommitMessage, Subject};
let message = CommitMessage::from(indoc!(
"
Update bashrc to include kubernetes completions
This should make it easier to deploy things for the developers.
Benchmarked with Hyperfine, no noticable performance decrease.
I am unsure as to why this wasn't being automatically discovered from Brew.
I've filed a bug report with them.
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Datum: Sat Jun 27 21:40:14 2020 +0200
;
; Auf Branch master
;
; Initialer Commit
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: .bashrc
;"
));
let bodies = vec![
Body::default(),
Body::from(indoc!(
"
This should make it easier to deploy things for the developers.
Benchmarked with Hyperfine, no noticable performance decrease."
)),
Body::default(),
Body::from(indoc!(
"
I am unsure as to why this wasn't being automatically discovered from Brew.
I've filed a bug report with them."
)),
];
assert_eq!(message.get_body(), Bodies::from(bodies))
sourcepub fn get_comments(&self) -> Comments<'_>
pub fn get_comments(&self) -> Comments<'_>
Get the Comments
from the CommitMessage
We this will get you all the comments before the Scissors
section. The
Scissors
section is the bit that appears when you run git commit --verbose
, that contains the diffs.
If there’s Comment
mixed in with the body, it’ll return those too,
but not any of the Body
around them.
Examples
use indoc::indoc;
use mit_commit::{Body, Comment, Comments, CommitMessage, Subject};
let message = CommitMessage::from(indoc!(
"
Update bashrc to include kubernetes completions
This should make it easier to deploy things for the developers.
Benchmarked with Hyperfine, no noticable performance decrease.
I am unsure as to why this wasn't being automatically discovered from Brew.
I've filed a bug report with them.
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Datum: Sat Jun 27 21:40:14 2020 +0200
;
; Auf Branch master
;
; Initialer Commit
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: .bashrc
;"
));
let comments = vec![Comment::from(indoc!(
"
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Datum: Sat Jun 27 21:40:14 2020 +0200
;
; Auf Branch master
;
; Initialer Commit
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: .bashrc
;"
))];
assert_eq!(message.get_comments(), Comments::from(comments))
sourcepub fn get_scissors(&self) -> Option<Scissors<'_>>
pub fn get_scissors(&self) -> Option<Scissors<'_>>
Get the Scissors
from the CommitMessage
We this will get you all the comments in the Scissors
section. The
Scissors
section is the bit that appears when you run git commit --verbose
, that contains the diffs, and is not preserved when you
save the commit.
Examples
use indoc::indoc;
use mit_commit::{Body, CommitMessage, Scissors, Subject};
let message = CommitMessage::from(indoc!(
"
Add file
This adds file primarily for demonstration purposes. It might not be
useful as an actual commit, but it's very useful as a example to use in
tests.
Relates-to: #128
; Short (50 chars or less) summary of changes
;
; More detailed explanatory text, if necessary. Wrap it to
; about 72 characters or so. In some contexts, the first
; line is treated as the subject of an email and the rest of
; the text as the body. The blank line separating the
; summary from the body is critical (unless you omit the body
; entirely); tools like rebase can get confused if you run
; the two together.
;
; Further paragraphs come after blank lines.
;
; - Bullet points are okay, too
;
; - Typically a hyphen or asterisk is used for the bullet,
; preceded by a single space, with blank lines in
; between, but conventions vary here
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Auf Branch main
; Ihr Branch ist auf demselben Stand wie 'origin/main'.
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: file
;
; ------------------------ >8 ------------------------
; \u{00E4}ndern oder entfernen Sie nicht die obige Zeile.
; Alles unterhalb von ihr wird ignoriert.
diff --git a/file b/file
new file mode 100644
index 0000000..e69de29
"
));
let scissors = Scissors::from(indoc!(
"
; ------------------------ >8 ------------------------
; \u{00E4}ndern oder entfernen Sie nicht die obige Zeile.
; Alles unterhalb von ihr wird ignoriert.
diff --git a/file b/file
new file mode 100644
index 0000000..e69de29
"
));
assert_eq!(message.get_scissors(), Some(scissors))
sourcepub fn get_trailers(&self) -> Trailers<'_>
pub fn get_trailers(&self) -> Trailers<'_>
Get the Scissors
from the CommitMessage
We this will get you all the comments in the Scissors
section. The
Scissors
section is the bit that appears when you run git commit --verbose
, that contains the diffs, and is not preserved when you
save the commit.
Examples
use indoc::indoc;
use mit_commit::{Body, CommitMessage, Trailer, Trailers};
let message = CommitMessage::from(indoc!(
"
Add file
Looks-like-a-trailer: But isn't
This adds file primarily for demonstration purposes. It might not be
useful as an actual commit, but it's very useful as a example to use in
tests.
Relates-to: #128
Relates-to: #129
; Short (50 chars or less) summary of changes
;
; More detailed explanatory text, if necessary. Wrap it to
; about 72 characters or so. In some contexts, the first
; line is treated as the subject of an email and the rest of
; the text as the body. The blank line separating the
; summary from the body is critical (unless you omit the body
; entirely); tools like rebase can get confused if you run
; the two together.
;
; Further paragraphs come after blank lines.
;
; - Bullet points are okay, too
;
; - Typically a hyphen or asterisk is used for the bullet,
; preceded by a single space, with blank lines in
; between, but conventions vary here
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Auf Branch main
; Ihr Branch ist auf demselben Stand wie 'origin/main'.
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: file
;
; ------------------------ >8 ------------------------
; \u{00E4}ndern oder entfernen Sie nicht die obige Zeile.
; Alles unterhalb von ihr wird ignoriert.
diff --git a/file b/file
new file mode 100644
index 0000000..e69de29
"
));
let trailers = vec![
Trailer::new("Relates-to".into(), "#128".into()),
Trailer::new("Relates-to".into(), "#129".into()),
];
assert_eq!(message.get_trailers(), Trailers::from(trailers))
sourcepub fn matches_pattern(&self, re: &Regex) -> bool
pub fn matches_pattern(&self, re: &Regex) -> bool
Does the CommitMessage
the saved portions of the commit
This takes a regex and matches it to the visible portions of the commits, so it excludes comments, and everything after the scissors.
Examples
use indoc::indoc;
use mit_commit::CommitMessage;
use regex::Regex;
let commit = CommitMessage::from(indoc!(
"
Example Commit Message
This is an example commit message for linting
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Auf Branch main
; Ihr Branch ist auf demselben Stand wie 'origin/main'.
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: file
;
"
));
let re = Regex::new("[Bb]itte").unwrap();
assert_eq!(commit.matches_pattern(&re), false);
let re = Regex::new("f[o\u{00FC}]r linting").unwrap();
assert_eq!(commit.matches_pattern(&re), true);
let re = Regex::new("[Ee]xample Commit Message").unwrap();
assert_eq!(commit.matches_pattern(&re), true);
sourcepub fn with_subject(self, subject: Subject<'a>) -> Self
pub fn with_subject(self, subject: Subject<'a>) -> Self
Give you a new CommitMessage
with the provided subject
Examples
use indoc::indoc;
use mit_commit::{CommitMessage, Subject};
use regex::Regex;
let commit = CommitMessage::from(indoc!(
"
Example Commit Message
This is an example commit message
"
));
assert_eq!(
commit.with_subject("Subject".into()).get_subject(),
Subject::from("Subject")
);
sourcepub fn with_body_contents(self, contents: &'a str) -> Self
pub fn with_body_contents(self, contents: &'a str) -> Self
Give you a new CommitMessage
with the provided body
Examples
use indoc::indoc;
use mit_commit::{CommitMessage, Subject};
use regex::Regex;
let commit = CommitMessage::from(indoc!(
"
Example Commit Message
This is an example commit message
"
));
let expected = CommitMessage::from(indoc!(
"
Example Commit Message
New body"
));
assert_eq!(commit.with_body_contents("New body"), expected);
A note on what we consider the body. The body is what falls after the gutter. This means the following behaviour might happen
use indoc::indoc;
use mit_commit::{CommitMessage, Subject};
use regex::Regex;
let commit = CommitMessage::from(indoc!(
"
Example Commit Message
without gutter"
));
let expected = CommitMessage::from(indoc!(
"
Example Commit Message
without gutter
New body"
));
assert_eq!(commit.with_body_contents("New body"), expected);
sourcepub fn get_comment_char(&self) -> Option<char>
pub fn get_comment_char(&self) -> Option<char>
Give you a new CommitMessage
with the provided body
Examples
use mit_commit::{CommitMessage, Subject};
let commit = CommitMessage::from("No comment\n\n# Some Comment");
assert_eq!(commit.get_comment_char().unwrap(), '#');
We return none is there is no comments
use mit_commit::{CommitMessage, Subject};
let commit = CommitMessage::from("No comment");
assert!(commit.get_comment_char().is_none());
Trait Implementations§
source§impl<'a> Clone for CommitMessage<'a>
impl<'a> Clone for CommitMessage<'a>
source§fn clone(&self) -> CommitMessage<'a>
fn clone(&self) -> CommitMessage<'a>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<'a> Debug for CommitMessage<'a>
impl<'a> Debug for CommitMessage<'a>
source§impl<'a> Default for CommitMessage<'a>
impl<'a> Default for CommitMessage<'a>
source§fn default() -> CommitMessage<'a>
fn default() -> CommitMessage<'a>
source§impl<'a> From<&'a str> for CommitMessage<'a>
impl<'a> From<&'a str> for CommitMessage<'a>
source§fn from(message: &'a str) -> CommitMessage<'a>
fn from(message: &'a str) -> CommitMessage<'a>
source§impl<'a> From<CommitMessage<'a>> for String
impl<'a> From<CommitMessage<'a>> for String
source§fn from(commit_message: CommitMessage<'_>) -> Self
fn from(commit_message: CommitMessage<'_>) -> Self
source§impl<'a> From<Cow<'a, str>> for CommitMessage<'a>
impl<'a> From<Cow<'a, str>> for CommitMessage<'a>
source§fn from(message: Cow<'a, str>) -> CommitMessage<'a>
fn from(message: Cow<'a, str>) -> CommitMessage<'a>
Create a new CommitMessage
Create a commit message from a string. It’s expected that you’ll be reading this during some sort of Git Hook
Examples
use indoc::indoc;
use mit_commit::{Bodies, CommitMessage, Subject};
let message = CommitMessage::from(indoc!(
"
Update bashrc to include kubernetes completions
This should make it easier to deploy things for the developers.
Benchmarked with Hyperfine, no noticable performance decrease.
; Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen,
; die mit ';' beginnen, werden ignoriert, und eine leere Beschreibung
; bricht den Commit ab.
;
; Datum: Sat Jun 27 21:40:14 2020 +0200
;
; Auf Branch master
;
; Initialer Commit
;
; Zum Commit vorgemerkte \u{00E4}nderungen:
; neue Datei: .bashrc
;"
));
assert_eq!(
message.get_subject(),
Subject::from("Update bashrc to include kubernetes completions")
)
Comment Character
We load the comment character for the commit message
Valid options are in [LEGAL_CHARACTERS
], these are the ’auto“ selection logic in the git codebase in the adjust_comment_line_char
function.
This does mean that we aren’t making 100% of characters available, which is technically possible, but given we don’t have access to the users git config this feels like a reasonable compromise, there are a lot of non-whitespace characters as options otherwise, and we don’t want to confuse a genuine body with a comment
source§impl<'a> From<String> for CommitMessage<'a>
impl<'a> From<String> for CommitMessage<'a>
source§impl<'a> PartialEq<CommitMessage<'a>> for CommitMessage<'a>
impl<'a> PartialEq<CommitMessage<'a>> for CommitMessage<'a>
source§fn eq(&self, other: &CommitMessage<'a>) -> bool
fn eq(&self, other: &CommitMessage<'a>) -> bool
self
and other
values to be equal, and is used
by ==
.