Skip to content

Commit

Permalink
temp: fix phabricator submit test
Browse files Browse the repository at this point in the history
  • Loading branch information
arxanas committed Oct 15, 2023
1 parent 62abbe4 commit 9e0f970
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 32 deletions.
89 changes: 69 additions & 20 deletions git-branchless-lib/src/core/eventlog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,21 +54,33 @@ struct Row {
/// Unlike in a database, there is no specific guarantee that an event
/// transaction is an atomic unit of work.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct EventTransactionId(isize);
pub enum EventTransactionId {
/// A normal transaction ID.
Id(isize),

/// A value indicating that the no events should actually be added for this transaction.
Suppressed,
}

impl ToString for EventTransactionId {
fn to_string(&self) -> String {
let EventTransactionId(event_id) = self;
event_id.to_string()
match self {
EventTransactionId::Id(event_id) => event_id.to_string(),
EventTransactionId::Suppressed => "SUPPRESSED".to_string(),
}
}
}

impl FromStr for EventTransactionId {
type Err = <isize as FromStr>::Err;

fn from_str(s: &str) -> Result<Self, Self::Err> {
let event_id = s.parse()?;
Ok(EventTransactionId(event_id))
if s == "SUPPRESSED" {
Ok(EventTransactionId::Suppressed)
} else {
let event_id = s.parse()?;
Ok(EventTransactionId::Id(event_id))
}
}
}

Expand Down Expand Up @@ -215,12 +227,39 @@ impl Event {
}
}

impl From<Event> for Row {
fn from(event: Event) -> Row {
match event {
impl TryFrom<Event> for Row {
type Error = ();

fn try_from(event: Event) -> Result<Self, Self::Error> {
let row = match event {
Event::RewriteEvent {
event_tx_id: EventTransactionId::Suppressed,
..
}
| Event::RefUpdateEvent {
event_tx_id: EventTransactionId::Suppressed,
..
}
| Event::CommitEvent {
event_tx_id: EventTransactionId::Suppressed,
..
}
| Event::ObsoleteEvent {
event_tx_id: EventTransactionId::Suppressed,
..
}
| Event::UnobsoleteEvent {
event_tx_id: EventTransactionId::Suppressed,
..
}
| Event::WorkingCopySnapshot {
event_tx_id: EventTransactionId::Suppressed,
..
} => return Err(()),

Event::RewriteEvent {
timestamp,
event_tx_id: EventTransactionId(event_tx_id),
event_tx_id: EventTransactionId::Id(event_tx_id),
old_commit_oid,
new_commit_oid,
} => Row {
Expand All @@ -235,7 +274,7 @@ impl From<Event> for Row {

Event::RefUpdateEvent {
timestamp,
event_tx_id: EventTransactionId(event_tx_id),
event_tx_id: EventTransactionId::Id(event_tx_id),
ref_name,
old_oid,
new_oid,
Expand All @@ -252,7 +291,7 @@ impl From<Event> for Row {

Event::CommitEvent {
timestamp,
event_tx_id: EventTransactionId(event_tx_id),
event_tx_id: EventTransactionId::Id(event_tx_id),
commit_oid,
} => Row {
timestamp,
Expand All @@ -266,7 +305,7 @@ impl From<Event> for Row {

Event::ObsoleteEvent {
timestamp,
event_tx_id: EventTransactionId(event_tx_id),
event_tx_id: EventTransactionId::Id(event_tx_id),
commit_oid,
} => Row {
timestamp,
Expand All @@ -280,7 +319,7 @@ impl From<Event> for Row {

Event::UnobsoleteEvent {
timestamp,
event_tx_id: EventTransactionId(event_tx_id),
event_tx_id: EventTransactionId::Id(event_tx_id),
commit_oid,
} => Row {
timestamp,
Expand All @@ -294,7 +333,7 @@ impl From<Event> for Row {

Event::WorkingCopySnapshot {
timestamp,
event_tx_id: EventTransactionId(event_tx_id),
event_tx_id: EventTransactionId::Id(event_tx_id),
head_oid,
commit_oid,
ref_name,
Expand All @@ -307,7 +346,8 @@ impl From<Event> for Row {
ref_name,
message: None,
},
}
};
Ok(row)
}
}

Expand All @@ -322,7 +362,7 @@ fn try_from_row_helper(row: &Row) -> Result<Event, eyre::Error> {
ref2,
message,
} = row;
let event_tx_id = EventTransactionId(event_tx_id);
let event_tx_id = EventTransactionId::Id(event_tx_id);

let get_oid =
|reference_name: &Option<ReferenceName>, oid_name: &str| -> eyre::Result<MaybeZeroOid> {
Expand Down Expand Up @@ -490,6 +530,10 @@ impl<'conn> EventLogDb<'conn> {
pub fn add_events(&self, events: Vec<Event>) -> eyre::Result<()> {
let tx = self.conn.unchecked_transaction()?;
for event in events {
let row = match Row::try_from(event) {
Ok(row) => row,
Err(()) => continue,
};
let Row {
timestamp,
type_,
Expand All @@ -498,7 +542,7 @@ impl<'conn> EventLogDb<'conn> {
ref2,
ref_name,
message,
} = Row::from(event);
} = row;

let ref1 = ref1.as_ref().map(|x| x.as_str());
let ref2 = ref2.as_ref().map(|x| x.as_str());
Expand Down Expand Up @@ -608,7 +652,7 @@ ORDER BY rowid ASC
// SQLite connection.
let event_tx_id: isize = self.conn.last_insert_rowid().try_into()?;
tx.commit()?;
Ok(EventTransactionId(event_tx_id))
Ok(EventTransactionId::Id(event_tx_id))
}

/// Create a new event transaction ID to be used to insert subsequent
Expand All @@ -623,7 +667,12 @@ ORDER BY rowid ASC

/// Get the message associated with the given transaction.
pub fn get_transaction_message(&self, event_tx_id: EventTransactionId) -> eyre::Result<String> {
let EventTransactionId(event_tx_id) = event_tx_id;
let event_tx_id = match event_tx_id {
EventTransactionId::Id(event_tx_id) => event_tx_id,
EventTransactionId::Suppressed => {
eyre::bail!("No message available for suppressed transaction ID")
}
};
let mut stmt = self.conn.prepare(
"
SELECT message
Expand Down Expand Up @@ -1352,7 +1401,7 @@ pub mod testing {

/// Create a new transaction ID, for testing.
pub fn new_event_transaction_id(id: isize) -> EventTransactionId {
EventTransactionId(id)
EventTransactionId::Id(id)
}

/// Create a new event cursor, for testing.
Expand Down
2 changes: 0 additions & 2 deletions git-branchless-submit/src/phabricator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,6 @@ Differential Revision: https://phabricator.example.com/D000$(git rev-list --coun
self.dag,
self.repo,
self.event_log_db,
event_tx_id,
self.revset,
&commits,
&ResolvedTestOptions {
Expand Down Expand Up @@ -644,7 +643,6 @@ Differential Revision: https://phabricator.example.com/D000$(git rev-list --coun
self.dag,
self.repo,
self.event_log_db,
event_tx_id,
self.revset,
&commits,
&test_options,
Expand Down
19 changes: 18 additions & 1 deletion git-branchless-submit/tests/test_phabricator_forge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,19 @@ fn test_submit_phabricator_strategy_worktree() -> eyre::Result<()> {
git.detach_head()?;
git.commit_file("test1", 1)?;
git.commit_file("test2", 2)?;
{
let stdout = git.smartlog()?;
insta::assert_snapshot!(stdout, @r###"
O f777ecc (master) create initial.txt
|
o 62fc20d create test1.txt
|
@ 96d1c37 create test2.txt
"###);
}

{
let (stdout, _stderr) = git.branchless_with_options(
let (stdout, stderr) = git.branchless_with_options(
"submit",
&[
"--create",
Expand All @@ -117,6 +127,13 @@ fn test_submit_phabricator_strategy_worktree() -> eyre::Result<()> {
..Default::default()
},
)?;
insta::assert_snapshot!(stderr, @r###"
branchless: creating working copy snapshot
Previous HEAD position was 96d1c37 create test2.txt
branchless: processing 1 update: ref HEAD
HEAD is now at ccb7fd5 create test2.txt
branchless: processing checkout
"###);
insta::assert_snapshot!(stdout, @r###"
Using command execution strategy: worktree
Attempting rebase in-memory...
Expand Down
8 changes: 5 additions & 3 deletions git-branchless-test/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ use lib::core::config::{
};
use lib::core::dag::{sorted_commit_set, CommitSet, Dag};
use lib::core::effects::{icons, Effects, OperationIcon, OperationType};
use lib::core::eventlog::{EventLogDb, EventReplayer, EventTransactionId};
use lib::core::eventlog::{
EventLogDb, EventReplayer, EventTransactionId, BRANCHLESS_TRANSACTION_ID_ENV_VAR,
};
use lib::core::formatting::{Glyphs, Pluralize, StyledStringBuilder};
use lib::core::repo_ext::RepoExt;
use lib::core::rewrite::{
Expand Down Expand Up @@ -619,7 +621,6 @@ fn subcommand_run(
&dag,
&repo,
&event_log_db,
event_tx_id,
&revset,
&commits,
&options,
Expand Down Expand Up @@ -1207,11 +1208,11 @@ pub fn run_tests<'a>(
dag: &Dag,
repo: &Repo,
event_log_db: &EventLogDb,
event_tx_id: EventTransactionId,
revset: &Revset,
commits: &[Commit],
options: &ResolvedTestOptions,
) -> EyreExitOr<TestResults> {
let event_tx_id = EventTransactionId::Suppressed;
let abort_trap = match set_abort_trap(
now,
effects,
Expand Down Expand Up @@ -2626,6 +2627,7 @@ fn test_commit(
.arg("-c")
.arg(options.command.to_string())
.current_dir(working_directory)
.env(BRANCHLESS_TRANSACTION_ID_ENV_VAR, event_tx_id.to_string())
.env("BRANCHLESS_TEST_COMMIT", commit.get_oid().to_string())
.env("BRANCHLESS_TEST_COMMAND", options.command.to_string());

Expand Down
12 changes: 6 additions & 6 deletions git-branchless/tests/test_bug_report.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,30 +126,30 @@ fn test_bug_report() -> eyre::Result<()> {
##### Event ID: 6, transaction ID: 4 (message: post-commit)
1. `CommitEvent { timestamp: <redacted for test>, event_tx_id: EventTransactionId(4), commit_oid: NonZeroOid(96d1c37a3d4363611c49f7e52186e189a04c531f) }`
1. `CommitEvent { timestamp: <redacted for test>, event_tx_id: Id(4), commit_oid: NonZeroOid(96d1c37a3d4363611c49f7e52186e189a04c531f) }`
```
:
@ 96d1c37 (> master) xxxxxx xxxxxxxxx
```
##### Event ID: 4, transaction ID: 3 (message: reference-transaction)
1. `RefUpdateEvent { timestamp: <redacted for test>, event_tx_id: EventTransactionId(3), ref_name: ReferenceName("HEAD"), old_oid: 62fc20d2a290daea0d52bdc2ed2ad4be6491010e, new_oid: 96d1c37a3d4363611c49f7e52186e189a04c531f, message: None }`
1. `RefUpdateEvent { timestamp: <redacted for test>, event_tx_id: EventTransactionId(3), ref_name: ReferenceName("refs/heads/master"), old_oid: 62fc20d2a290daea0d52bdc2ed2ad4be6491010e, new_oid: 96d1c37a3d4363611c49f7e52186e189a04c531f, message: None }`
1. `RefUpdateEvent { timestamp: <redacted for test>, event_tx_id: Id(3), ref_name: ReferenceName("HEAD"), old_oid: 62fc20d2a290daea0d52bdc2ed2ad4be6491010e, new_oid: 96d1c37a3d4363611c49f7e52186e189a04c531f, message: None }`
1. `RefUpdateEvent { timestamp: <redacted for test>, event_tx_id: Id(3), ref_name: ReferenceName("refs/heads/master"), old_oid: 62fc20d2a290daea0d52bdc2ed2ad4be6491010e, new_oid: 96d1c37a3d4363611c49f7e52186e189a04c531f, message: None }`
```
:
@ 96d1c37 (> master) xxxxxx xxxxxxxxx
```
##### Event ID: 3, transaction ID: 2 (message: post-commit)
1. `CommitEvent { timestamp: <redacted for test>, event_tx_id: EventTransactionId(2), commit_oid: NonZeroOid(62fc20d2a290daea0d52bdc2ed2ad4be6491010e) }`
1. `CommitEvent { timestamp: <redacted for test>, event_tx_id: Id(2), commit_oid: NonZeroOid(62fc20d2a290daea0d52bdc2ed2ad4be6491010e) }`
```
:
@ 96d1c37 (> master) xxxxxx xxxxxxxxx
```
##### Event ID: 1, transaction ID: 1 (message: reference-transaction)
1. `RefUpdateEvent { timestamp: <redacted for test>, event_tx_id: EventTransactionId(1), ref_name: ReferenceName("HEAD"), old_oid: f777ecc9b0db5ed372b2615695191a8a17f79f24, new_oid: 62fc20d2a290daea0d52bdc2ed2ad4be6491010e, message: None }`
1. `RefUpdateEvent { timestamp: <redacted for test>, event_tx_id: EventTransactionId(1), ref_name: ReferenceName("refs/heads/master"), old_oid: f777ecc9b0db5ed372b2615695191a8a17f79f24, new_oid: 62fc20d2a290daea0d52bdc2ed2ad4be6491010e, message: None }`
1. `RefUpdateEvent { timestamp: <redacted for test>, event_tx_id: Id(1), ref_name: ReferenceName("HEAD"), old_oid: f777ecc9b0db5ed372b2615695191a8a17f79f24, new_oid: 62fc20d2a290daea0d52bdc2ed2ad4be6491010e, message: None }`
1. `RefUpdateEvent { timestamp: <redacted for test>, event_tx_id: Id(1), ref_name: ReferenceName("refs/heads/master"), old_oid: f777ecc9b0db5ed372b2615695191a8a17f79f24, new_oid: 62fc20d2a290daea0d52bdc2ed2ad4be6491010e, message: None }`
```
:
@ 96d1c37 (> master) xxxxxx xxxxxxxxx
Expand Down

0 comments on commit 9e0f970

Please sign in to comment.