Skip to content

Commit

Permalink
Added new Merge Conflicts level
Browse files Browse the repository at this point in the history
  • Loading branch information
benthayer committed Aug 14, 2020
1 parent 004ed74 commit 7b2a059
Show file tree
Hide file tree
Showing 12 changed files with 108 additions and 6 deletions.
4 changes: 3 additions & 1 deletion gitgud/skills/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from gitgud.skills.rework import skill as rework_skill
from gitgud.skills.mixedbag import skill as mixedbag_skill
from gitgud.skills.extras import skill as extras_skill
from gitgud.skills.new_basics import skill as new_basics_skill

from gitgud.skills.util import AllSkills

Expand All @@ -13,7 +14,8 @@
rampup_skill,
rework_skill,
mixedbag_skill,
extras_skill
extras_skill,
new_basics_skill
])

all_levels = []
Expand Down
14 changes: 9 additions & 5 deletions gitgud/skills/level_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,16 +93,20 @@ def file(self, path):
def cat_file(self, path):
cat_file(self.file(path))

def details(self):
details_path = self.file('details.yaml')
if details_path.is_file():
with open(details_path) as details_file:
return yaml.safe_load(details_file)
else:
return None

def _setup(self):
file_operator = operations.get_operator()
file_operator.use_repo()
commits, head = parse_spec(self.file('setup.spec'))

details_path = self.file('details.yaml')
if details_path.is_file():
details = yaml.safe_load(details_path.open())
else:
details = None
details = self.details()

file_operator.create_tree(commits, head, details, self.level_dir)

Expand Down
32 changes: 32 additions & 0 deletions gitgud/skills/new_basics/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from gitgud import operations
from gitgud.skills.level_builder import BasicLevel
from gitgud.skills.util import Skill


class MergeConflicts(BasicLevel):
def _test(self):
if not super()._test():
return False

op = operations.get_operator()
tree = op.repo.head.commit.tree
merge_details = self.details()['M1']['files']

for blob in tree.blobs:
path = blob.path
content = merge_details[path][0]
blob_content = blob.data_stream.read().decode('ascii')

if content.strip() != blob_content.strip():
return False

return True


skill = Skill(
'Placeholder',
'newbasics',
[
MergeConflicts('Merge Conflicts', 'conflicts', __name__)
]
)
26 changes: 26 additions & 0 deletions gitgud/skills/new_basics/_conflicts/details.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
'1':
message: "Added intro"
files:
intro.txt:
- Once upon a time, there was a princess
'3':
message: "Added middle"
add-files:
middle.txt:
- She lived a fulfilling life
'2':
message: "Added ending"
add-files:
middle.txt:
- She lived
ending.txt:
- And then she died
'M1':
message: "Merge branch 'ending' into master"
files:
intro.txt:
- Once upon a time, there was a princess
middle.txt:
- She lived a fulfilling life
ending.txt:
- And then she died
3 changes: 3 additions & 0 deletions gitgud/skills/new_basics/_conflicts/explanation.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Use this file to explain to the users how to use the git feature that this level focuses on.
>>>
Separate blocks using ">>>", and be sure to include tips and examples as explanation aids.
4 changes: 4 additions & 0 deletions gitgud/skills/new_basics/_conflicts/filename.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Hey, this file is getting added by details.yaml to commit 4!

All this content will be copied exactly as it appears here, even with extra blank lines at the end of the file!

1 change: 1 addition & 0 deletions gitgud/skills/new_basics/_conflicts/goal.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
In this file, write a short explanation of the level's goal (e.g. "Merge commits 1 and 2").
4 changes: 4 additions & 0 deletions gitgud/skills/new_basics/_conflicts/setup.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
1
2 (master)
3 : 1 (other)
master
4 changes: 4 additions & 0 deletions gitgud/skills/new_basics/_conflicts/solution.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
git merge other
echo "She lived a fulfilling life" > middle.txt
git add middle.txt
git commit --no-edit
5 changes: 5 additions & 0 deletions gitgud/skills/new_basics/_conflicts/test.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
1
2
3 : 1 (other)
M1 : 2 3 (master)
master
15 changes: 15 additions & 0 deletions gitgud/skills/new_basics/test_levels.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import pytest

from gitgud.skills.testing import simulate

from . import skill


level_tests = [
(level, level.solution_list()) for level in skill
]


@pytest.mark.parametrize('level,commands', level_tests)
def test_level(gg, level, commands):
simulate(gg, level, commands)
2 changes: 2 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
'gitgud.skills.rework',
'gitgud.skills.intro',
'gitgud.skills.mixedbag',
'gitgud.skills.new_basics',
],
package_data={
'gitgud': ['version.txt', 'welcome.txt'],
Expand All @@ -33,6 +34,7 @@
'gitgud.skills.rampup': ['_*/*'],
'gitgud.skills.rework': ['_*/*'],
'gitgud.skills.mixedbag': ['_*/*'],
'gitgud.skills.new_basics': ['_*/*'],
},
python_requires='>=3.6',
install_requires=[
Expand Down

0 comments on commit 7b2a059

Please sign in to comment.