mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
8e39d56ad8
Summary: In D6446057, I added a new entry to the dict returned by `config.get_client_info()`. I only ran the cli tests while working on D6446057, but I should have ran all of the tests because there was an integration test (`InfoTest`) that verified the return value of this method, so it broke due to my change. (Note: this ignores all push blocking failures!) Reviewed By: simpkins Differential Revision: D6464806 fbshipit-source-id: 1b0ac0853301ba33e5e948353e4c89c0d97c0d83
103 lines
3.2 KiB
Python
103 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (c) 2016-present, Facebook, Inc.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under the BSD-style license found in the
|
|
# LICENSE file in the root directory of this source tree. An additional grant
|
|
# of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
from .lib import testcase
|
|
import json
|
|
import os
|
|
|
|
# This is the name of the default repository created by EdenRepoTestBase.
|
|
repo_name = 'main'
|
|
|
|
|
|
@testcase.eden_repo_test
|
|
class InfoTest:
|
|
def populate_repo(self):
|
|
self.repo.write_file('hello', 'hola\n')
|
|
self.repo.commit('Initial commit.')
|
|
|
|
def test_info_with_bind_mounts(self):
|
|
edenrc = os.path.join(os.environ['HOME'], '.edenrc')
|
|
with open(edenrc, 'w') as f:
|
|
f.write(
|
|
'''\
|
|
[repository {repo_name}]
|
|
path = {repo_path}
|
|
type = {repo_type}
|
|
|
|
[bindmounts {repo_name}]
|
|
buck-out = buck-out
|
|
'''.format(
|
|
repo_name=repo_name,
|
|
repo_path=self.repo.get_canonical_root(),
|
|
repo_type=self.repo.get_type()
|
|
)
|
|
)
|
|
|
|
basename = 'eden_mount'
|
|
tmp = os.path.join(self.tmp_dir, basename)
|
|
|
|
self.eden.run_cmd('clone', repo_name, tmp)
|
|
info = self.eden.run_cmd('info', tmp)
|
|
|
|
client_info = json.loads(info)
|
|
client_dir = os.path.join(self.eden_dir, 'clients', basename)
|
|
self.assertEqual(
|
|
{
|
|
'bind-mounts': {
|
|
'buck-out': 'buck-out',
|
|
},
|
|
'client-dir': client_dir,
|
|
'scm_type': self.repo.get_type(),
|
|
'mount': tmp,
|
|
'snapshot': self.repo.get_head_hash(),
|
|
}, client_info
|
|
)
|
|
|
|
def test_relative_path(self):
|
|
'''
|
|
Test calling "eden info <relative_path>" and make sure it gives
|
|
the expected results.
|
|
'''
|
|
info = self.eden.run_cmd('info', os.path.relpath(self.mount))
|
|
|
|
client_info = json.loads(info)
|
|
client_dir = os.path.join(
|
|
self.eden_dir, 'clients', os.path.basename(self.mount)
|
|
)
|
|
self.assertEqual(
|
|
{
|
|
'bind-mounts': {},
|
|
'client-dir': client_dir,
|
|
'scm_type': self.repo.get_type(),
|
|
'mount': self.mount,
|
|
'snapshot': self.repo.get_head_hash(),
|
|
}, client_info
|
|
)
|
|
|
|
def test_through_symlink(self):
|
|
'''
|
|
Test calling "eden info" through a symlink and make sure it gives
|
|
the expected results. This makes sure "eden info" resolves the path
|
|
correctly before looking it up in the configuration.
|
|
'''
|
|
link1 = os.path.join(self.tmp_dir, 'link1')
|
|
os.symlink(self.mount, link1)
|
|
|
|
info1 = json.loads(self.eden.run_cmd('info', link1))
|
|
self.assertEqual(self.mount, info1['mount'])
|
|
|
|
# Create a non-normalized symlink pointing to the parent directory
|
|
# of the mount
|
|
link2 = os.path.join(self.tmp_dir, 'mounts_link')
|
|
os.symlink(self.mount + '//..', link2)
|
|
mount_through_link2 = os.path.join(link2, self.repo_name)
|
|
|
|
info2 = json.loads(self.eden.run_cmd('info', mount_through_link2))
|
|
self.assertEqual(self.mount, info2['mount'])
|