Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.newbasics import skill as newbasics_skill

from gitgud.skills.util import AllSkills

Expand All @@ -13,7 +14,8 @@
rampup_skill,
rework_skill,
mixedbag_skill,
extras_skill
extras_skill,
newbasics_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/newbasics/__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/newbasics/_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/newbasics/_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.
1 change: 1 addition & 0 deletions gitgud/skills/newbasics/_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/newbasics/_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/newbasics/_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/newbasics/_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/newbasics/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 @@ -18,6 +18,7 @@
'gitgud',
'gitgud.hooks',
'gitgud.skills',
'gitgud.skills.newbasics',
'gitgud.skills.basics',
'gitgud.skills.extras',
'gitgud.skills.rampup',
Expand All @@ -28,6 +29,7 @@
package_data={
'gitgud': ['version.txt', 'welcome.txt'],
'gitgud.skills.intro': ['_*/*'],
'gitgud.skills.newbasics': ['_*/*'],
'gitgud.skills.basics': ['_*/*'],
'gitgud.skills.extras': ['_*/*'],
'gitgud.skills.rampup': ['_*/*'],
Expand Down