Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Improve per-step state tracking. #381
Conversation
coveralls
commented
Mar 18, 2016
sergiusens
reviewed
Mar 18, 2016
| + index = common.COMMAND_ORDER.index(expected_step) | ||
| + for step in common.COMMAND_ORDER[:index+1]: | ||
| + self.assertTrue(os.path.exists(os.path.join(state_dir, step)), | ||
| + 'Expected {!r} to be run for {}'.format(step, |
sergiusens
Mar 18, 2016
Collaborator
I'm being picky, but can all args for format be on the same next line?
kyrofa
Mar 18, 2016
Member
Ah, I'm sorry @sergiusens you keep asking me to do that and I keep forgetting
sergiusens
reviewed
Mar 18, 2016
| + index = common.COMMAND_ORDER.index(expected_step) | ||
| + for step in common.COMMAND_ORDER[:index+1]: | ||
| + self.assertTrue(os.path.exists(os.path.join(state_dir, step)), | ||
| + 'Expected {!r} to be run for {}'.format(step, |
sergiusens
reviewed
Mar 18, 2016
| }) | ||
| return parts | ||
| + def verify_state(self, part_name, state_dir, expected_step): |
sergiusens
Mar 18, 2016
Collaborator
This looks like copy paste code, why not put it as part of the general test class or something? @elopio can provide guidance
sergiusens
reviewed
Mar 18, 2016
| - self.state_file = os.path.join(common.get_partsdir(), 'part1', 'state') | ||
| + self.state_dir = os.path.join(common.get_partsdir(), 'part1', 'state') | ||
| + | ||
| + def verify_state(self, part_name, expected_step): |
sergiusens
reviewed
Mar 18, 2016
| }) | ||
| return parts | ||
| + def verify_state(self, part_name, state_dir, expected_step): |
sergiusens
reviewed
Mar 18, 2016
| }) | ||
| return parts | ||
| + def verify_state(self, part_name, state_dir, expected_step): |
sergiusens
reviewed
Mar 18, 2016
| - self.state_file = os.path.join(common.get_partsdir(), 'part1', 'state') | ||
| + self.statedir = os.path.join(common.get_partsdir(), 'part1', 'state') | ||
| + | ||
| + def verify_state(self, expected_step): |
sergiusens
reviewed
Mar 18, 2016
| @@ -304,6 +343,16 @@ def test_clean_part_already_clean(self, mock_exists, mock_rmtree): | ||
| mock_exists.assert_called_once_with(partdir) | ||
| self.assertFalse(mock_rmtree.called) | ||
| + def clear_common_directories(self): |
sergiusens
reviewed
Mar 18, 2016
| + if os.path.exists(self._step_state_file(step)): | ||
| + return step | ||
| + | ||
| + return None |
sergiusens
reviewed
Mar 18, 2016
| + def is_dirty(self, step): | ||
| + last_step = self.last_step() | ||
| + if last_step: | ||
| + return (common.COMMAND_ORDER.index(step) > |
sergiusens
Mar 18, 2016
Collaborator
if we have a none step we can just return this expression, right?
kyrofa
Mar 18, 2016
Member
Yeah that would work, but doing so almost feels a little too clever to me. It'd be difficult to follow.
|
Looks good; added some comments and also waiting for tests to finish |
coveralls
commented
Mar 18, 2016
sergiusens
reviewed
Mar 18, 2016
| + for command in common.COMMAND_ORDER[index+1:]: | ||
| + state_file = self._step_state_file(command) | ||
| + if os.path.exists(state_file): | ||
| + os.remove(state_file) |
sergiusens
Mar 18, 2016
Collaborator
Now that tests have past and I see coverage has dropped I'm going to be pedantic and say this line isn't tested
https://coveralls.io/builds/5471541/source?filename=snapcraft%2Fpluginhandler.py#L144
And it is true, I don't see a unit test that covers this case.
coveralls
commented
Mar 18, 2016
|
Oh my gosh... coverage to three significant digits... |
kyrofa commentedMar 18, 2016
This PR resolves LP: #1558810 by moving from a single state file to per-step state files. This is necessary for future changes, such as tracking dirty state and per-step cleaning rules.