Skip to content

Commit d0da3ae

Browse files
committed
Added new Merge Conflicts level
1 parent 004ed74 commit d0da3ae

12 files changed

Lines changed: 108 additions & 6 deletions

File tree

gitgud/skills/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from gitgud.skills.rework import skill as rework_skill
55
from gitgud.skills.mixedbag import skill as mixedbag_skill
66
from gitgud.skills.extras import skill as extras_skill
7+
from gitgud.skills.new_basics import skill as new_basics_skill
78

89
from gitgud.skills.util import AllSkills
910

@@ -13,7 +14,8 @@
1314
rampup_skill,
1415
rework_skill,
1516
mixedbag_skill,
16-
extras_skill
17+
extras_skill,
18+
new_basics_skill
1719
])
1820

1921
all_levels = []

gitgud/skills/level_builder.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,20 @@ def file(self, path):
9393
def cat_file(self, path):
9494
cat_file(self.file(path))
9595

96+
def details(self):
97+
details_path = self.file('details.yaml')
98+
if details_path.is_file():
99+
with open(details_path) as details_file:
100+
return yaml.safe_load(details_file)
101+
else:
102+
return None
103+
96104
def _setup(self):
97105
file_operator = operations.get_operator()
98106
file_operator.use_repo()
99107
commits, head = parse_spec(self.file('setup.spec'))
100108

101-
details_path = self.file('details.yaml')
102-
if details_path.is_file():
103-
details = yaml.safe_load(details_path.open())
104-
else:
105-
details = None
109+
details = self.details()
106110

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from gitgud import operations
2+
from gitgud.skills.level_builder import BasicLevel
3+
from gitgud.skills.util import Skill
4+
5+
6+
class MergeConflicts(BasicLevel):
7+
def _test(self):
8+
if not super()._test():
9+
return False
10+
11+
op = operations.get_operator()
12+
tree = op.repo.head.commit.tree
13+
merge_details = self.details()['M1']['files']
14+
15+
for blob in tree.blobs:
16+
path = blob.path
17+
content = merge_details[path][0]
18+
blob_content = blob.data_stream.read().decode('ascii')
19+
20+
if content.strip() != blob_content.strip():
21+
return False
22+
23+
return True
24+
25+
26+
skill = Skill(
27+
'Placeholder',
28+
'newbasics',
29+
[
30+
MergeConflicts('Merge Conflicts', 'conflicts', __name__)
31+
]
32+
)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
'1':
2+
message: "Added intro"
3+
files:
4+
intro.txt:
5+
- Once upon a time, there was a princess
6+
'3':
7+
message: "Added middle"
8+
add-files:
9+
middle.txt:
10+
- She lived a fulfilling life
11+
'2':
12+
message: "Added ending"
13+
add-files:
14+
middle.txt:
15+
- She lived
16+
ending.txt:
17+
- And then she died
18+
'M1':
19+
message: "Merge branch 'ending' into master"
20+
files:
21+
intro.txt:
22+
- Once upon a time, there was a princess
23+
middle.txt:
24+
- She lived a fulfilling life
25+
ending.txt:
26+
- And then she died
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Use this file to explain to the users how to use the git feature that this level focuses on.
2+
>>>
3+
Separate blocks using ">>>", and be sure to include tips and examples as explanation aids.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Hey, this file is getting added by details.yaml to commit 4!
2+
3+
All this content will be copied exactly as it appears here, even with extra blank lines at the end of the file!
4+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
In this file, write a short explanation of the level's goal (e.g. "Merge commits 1 and 2").
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
1
2+
2 (master)
3+
3 : 1 (other)
4+
master
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
git merge other
2+
echo "She lived a fulfilling life" > middle.txt
3+
git add middle.txt
4+
git commit --no-edit
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
1
2+
2
3+
3 : 1 (other)
4+
M1 : 2 3 (master)
5+
master

0 commit comments

Comments
 (0)