76 lines
2.4 KiB
Python
Executable file
76 lines
2.4 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# Copyright (c) 2014 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import sys
|
|
import os
|
|
|
|
_TOP_PATH = os.path.abspath(os.path.join(
|
|
os.path.dirname(__file__), '..'))
|
|
|
|
|
|
class Link(object):
|
|
|
|
def __init__(self, dst_path, src_path):
|
|
self.dst_path = dst_path
|
|
self.src_path = src_path
|
|
|
|
def Update(self):
|
|
full_src_path = os.path.join(_TOP_PATH, self.src_path)
|
|
full_dst_path = os.path.join(_TOP_PATH, self.dst_path)
|
|
|
|
full_dst_path_dirname = os.path.dirname(full_dst_path)
|
|
|
|
src_path_rel = os.path.relpath(full_src_path, full_dst_path_dirname)
|
|
|
|
assert os.path.exists(full_src_path)
|
|
if not os.path.exists(full_dst_path_dirname):
|
|
sys.stdout.write('ERROR\n\n')
|
|
sys.stdout.write(' dst dir doesn\'t exist: %s\n' % full_dst_path_dirname)
|
|
sys.stdout.write('\n\n')
|
|
sys.exit(255)
|
|
|
|
if os.path.exists(full_dst_path) or os.path.islink(full_dst_path):
|
|
if not os.path.islink(full_dst_path):
|
|
sys.stdout.write('ERROR\n\n')
|
|
sys.stdout.write(' Cannot install %s, dst already exists:\n %s\n' % (
|
|
os.path.basename(self.src_path), full_dst_path))
|
|
sys.stdout.write('\n\n')
|
|
sys.exit(255)
|
|
|
|
existing_src_path_rel = os.readlink(full_dst_path)
|
|
if existing_src_path_rel == src_path_rel:
|
|
return
|
|
else:
|
|
sys.stdout.write('ERROR\n\n')
|
|
sys.stdout.write(
|
|
' Cannot install %s, because %s is linked elsewhere.\n' % (
|
|
os.path.basename(self.src_path),
|
|
os.path.relpath(full_dst_path)))
|
|
sys.stdout.write('\n\n')
|
|
sys.exit(255)
|
|
|
|
os.symlink(src_path_rel, full_dst_path)
|
|
|
|
|
|
def InstallHooks():
|
|
"""Installs the git pre-push hooks."""
|
|
if sys.platform == 'win32':
|
|
return
|
|
|
|
# Remove old pre-commit, see https://github.com/google/trace-viewer/issues/932
|
|
old_precommit = os.path.join(_TOP_PATH, '.git', 'hooks', 'pre-commit')
|
|
old_precommit_target = os.path.join(_TOP_PATH, 'hooks', 'pre_commit')
|
|
if (os.path.islink(old_precommit) and
|
|
os.path.abspath(os.readlink(old_precommit)) == old_precommit_target):
|
|
os.remove(old_precommit)
|
|
|
|
# The pre-push hook prevents forced pushes; see ./pre_push.
|
|
links = [
|
|
Link(os.path.join('.git', 'hooks', 'pre-push'),
|
|
os.path.join('hooks', 'pre_push'))
|
|
]
|
|
|
|
for l in links:
|
|
l.Update()
|