2017-10-28 00:08:50 +03:00
|
|
|
#!/usr/bin/env python3
|
2019-06-20 02:58:25 +03:00
|
|
|
# Copyright (c) Facebook, Inc. and its affiliates.
|
2017-10-28 00:08:50 +03:00
|
|
|
#
|
2019-06-20 02:58:25 +03:00
|
|
|
# This software may be used and distributed according to the terms of the
|
|
|
|
# GNU General Public License version 2.
|
2017-10-28 00:08:50 +03:00
|
|
|
|
|
|
|
import logging
|
2018-05-10 07:33:49 +03:00
|
|
|
|
2018-11-17 06:39:20 +03:00
|
|
|
from eden.integration.lib import hgrepo
|
|
|
|
|
2017-11-08 05:47:42 +03:00
|
|
|
from .lib.hg_extension_test_base import EdenHgTestCase, hg_test
|
2017-10-28 00:08:50 +03:00
|
|
|
|
2018-05-10 07:33:49 +03:00
|
|
|
|
|
|
|
log = logging.getLogger("eden.test.absorb")
|
2017-10-28 00:08:50 +03:00
|
|
|
|
|
|
|
|
|
|
|
@hg_test
|
2020-02-25 05:53:48 +03:00
|
|
|
# pyre-ignore[13]: T62487924
|
2017-11-08 05:47:42 +03:00
|
|
|
class AbsorbTest(EdenHgTestCase):
|
2018-11-14 23:13:46 +03:00
|
|
|
commit1: str
|
|
|
|
|
2018-11-17 06:39:20 +03:00
|
|
|
def populate_backing_repo(self, repo: hgrepo.HgRepository) -> None:
|
2018-05-10 07:33:49 +03:00
|
|
|
repo.write_file("readme.txt", "readme\n")
|
|
|
|
repo.write_file(
|
|
|
|
"src/test.c",
|
|
|
|
"""\
|
2017-10-28 00:08:50 +03:00
|
|
|
start of the file
|
|
|
|
line 1
|
|
|
|
line 2
|
|
|
|
line 3
|
|
|
|
end of the file
|
2018-05-10 07:33:49 +03:00
|
|
|
""",
|
|
|
|
)
|
|
|
|
self.commit1 = repo.commit("Initial commit.")
|
|
|
|
repo.hg("phase", "--public", self.commit1)
|
|
|
|
log.debug("commit1: %s", self.commit1)
|
2017-10-28 00:08:50 +03:00
|
|
|
|
2018-11-17 06:39:20 +03:00
|
|
|
def test_absorb(self) -> None:
|
2017-10-28 00:08:50 +03:00
|
|
|
self.assert_status_empty()
|
|
|
|
|
|
|
|
# Update src/test.c in our first draft commit
|
2018-05-10 07:33:49 +03:00
|
|
|
self.write_file(
|
|
|
|
"src/test.c",
|
|
|
|
"""\
|
2017-10-28 00:08:50 +03:00
|
|
|
start of the file
|
|
|
|
line 1
|
|
|
|
new line a
|
|
|
|
line 2
|
|
|
|
new line b
|
|
|
|
line 3
|
|
|
|
end of the file
|
2018-05-10 07:33:49 +03:00
|
|
|
""",
|
|
|
|
)
|
|
|
|
self.assert_status({"src/test.c": "M"})
|
|
|
|
commit2 = self.repo.commit("new lines in test.c\n")
|
2017-10-28 00:08:50 +03:00
|
|
|
self.assert_status_empty()
|
2018-05-10 07:33:49 +03:00
|
|
|
log.debug("commit2: %s", commit2)
|
2017-10-28 00:08:50 +03:00
|
|
|
|
|
|
|
# Update src/new.c in our second draft commit
|
2018-05-10 07:33:49 +03:00
|
|
|
self.write_file(
|
|
|
|
"src/new.c",
|
|
|
|
"""\
|
2017-10-28 00:08:50 +03:00
|
|
|
this is a brand new file
|
|
|
|
with some new contents
|
|
|
|
last line
|
2018-05-10 07:33:49 +03:00
|
|
|
""",
|
|
|
|
)
|
|
|
|
self.hg("add", "src/new.c")
|
|
|
|
self.assert_status({"src/new.c": "A"})
|
|
|
|
commit3 = self.repo.commit("add new.c\n")
|
2017-10-28 00:08:50 +03:00
|
|
|
self.assert_status_empty()
|
2018-05-10 07:33:49 +03:00
|
|
|
log.debug("commit2: %s", commit3)
|
2017-10-28 00:08:50 +03:00
|
|
|
|
|
|
|
# Now modify test.c and new.c in the working copy
|
2018-05-10 07:33:49 +03:00
|
|
|
self.write_file(
|
|
|
|
"src/test.c",
|
|
|
|
"""\
|
2017-10-28 00:08:50 +03:00
|
|
|
start of the file
|
|
|
|
line 1
|
|
|
|
new line abc
|
|
|
|
testing
|
|
|
|
line 2
|
|
|
|
new line b
|
|
|
|
line 3
|
|
|
|
end of the file
|
2018-05-10 07:33:49 +03:00
|
|
|
""",
|
|
|
|
)
|
|
|
|
self.write_file(
|
|
|
|
"src/new.c",
|
|
|
|
"""\
|
2017-10-28 00:08:50 +03:00
|
|
|
this is a brand new file
|
|
|
|
with some enhanced new contents
|
|
|
|
last line
|
2018-05-10 07:33:49 +03:00
|
|
|
""",
|
|
|
|
)
|
|
|
|
self.assert_status({"src/new.c": "M", "src/test.c": "M"})
|
2017-10-28 00:08:50 +03:00
|
|
|
old_commits = self.repo.log()
|
|
|
|
|
|
|
|
# Run "hg absorb" to fold these changes into their respective commits
|
2018-10-13 11:00:22 +03:00
|
|
|
out = self.hg("absorb", "-ap")
|
2018-05-10 07:33:49 +03:00
|
|
|
log.debug("absorb output:\n%s" % (out,))
|
2017-10-28 00:08:50 +03:00
|
|
|
self.assert_status_empty()
|
|
|
|
|
|
|
|
# Verify the results are what we expect
|
|
|
|
new_commits = self.repo.log()
|
2018-05-10 07:33:49 +03:00
|
|
|
files_changed = self.repo.log(template="{files}")
|
2017-10-28 00:08:50 +03:00
|
|
|
self.assertEqual(len(old_commits), len(new_commits))
|
|
|
|
self.assertEqual(old_commits[0], new_commits[0])
|
|
|
|
self.assertNotEqual(old_commits[1], new_commits[1])
|
|
|
|
self.assertNotEqual(old_commits[2], new_commits[2])
|
2018-05-10 07:33:49 +03:00
|
|
|
self.assertEqual(files_changed[0], "readme.txt src/test.c")
|
|
|
|
self.assertEqual(files_changed[1], "src/test.c")
|
|
|
|
self.assertEqual(files_changed[2], "src/new.c")
|
2017-10-28 00:08:50 +03:00
|
|
|
|
2018-05-10 07:33:49 +03:00
|
|
|
self.assertEqual(
|
|
|
|
self.read_file("src/test.c"),
|
|
|
|
"""\
|
2017-10-28 00:08:50 +03:00
|
|
|
start of the file
|
|
|
|
line 1
|
|
|
|
new line abc
|
|
|
|
testing
|
|
|
|
line 2
|
|
|
|
new line b
|
|
|
|
line 3
|
|
|
|
end of the file
|
2018-05-10 07:33:49 +03:00
|
|
|
""",
|
|
|
|
)
|
|
|
|
self.assertEqual(
|
|
|
|
self.read_file("src/new.c"),
|
|
|
|
"""\
|
2017-10-28 00:08:50 +03:00
|
|
|
this is a brand new file
|
|
|
|
with some enhanced new contents
|
|
|
|
last line
|
2018-05-10 07:33:49 +03:00
|
|
|
""",
|
|
|
|
)
|