Integrating latest 47acbe8
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
############################################################################################
|
||||
# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates, or
|
||||
# a third party where indicated.
|
||||
#
|
||||
# For complete copyright and license terms please see the LICENSE at the root of this
|
||||
# distribution (the "License"). All use of this software is governed by the License,
|
||||
# or, if provided, by the license below or the license accompanying this file. Do not
|
||||
# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
#############################################################################################
|
||||
|
||||
"""
|
||||
This file is the central location for functions and operations for CodeCommit that are shared accross different scripts.
|
||||
"""
|
||||
import subprocess
|
||||
import os
|
||||
import git
|
||||
|
||||
# Initializes a Git repository configured with necessary settings to access CodeCommit via AWS CLI credentials.
|
||||
def init_git_repo(aws_repo_url, awscli_profile, local_repo_directory):
|
||||
"""
|
||||
Initializes a Git repository configured with necessary settings to access CodeCommit via AWS CLI credentials.
|
||||
|
||||
:param aws_repo_url: Clone URL for the CodeCommit repo
|
||||
:param awscli_profile: AWS CLI profile with access/permissions to the repo.
|
||||
:param local_repo_directory: Clone directory
|
||||
:return:
|
||||
"""
|
||||
|
||||
parse_key = "amazonaws.com"
|
||||
host_domain_end_index = aws_repo_url.index(parse_key) + len(parse_key)
|
||||
host_domain = aws_repo_url[:host_domain_end_index]
|
||||
|
||||
subprocess.call(["git", "init", local_repo_directory])
|
||||
|
||||
config_append = f"""
|
||||
[credential "{host_domain}"]
|
||||
\thelper = !aws --profile {awscli_profile} codecommit credential-helper $@
|
||||
\tUseHttpPath = true
|
||||
|
||||
[remote "origin"]
|
||||
\turl = {aws_repo_url}
|
||||
\tfetch = +refs/heads/*:refs/remotes/origin/*
|
||||
|
||||
[branch "master"]
|
||||
\tremote = origin
|
||||
\tmerge = refs/heads/master
|
||||
"""
|
||||
|
||||
config_filepath = os.path.join(local_repo_directory, '.git', 'config')
|
||||
|
||||
with open(config_filepath, "a") as myfile:
|
||||
myfile.write(config_append)
|
||||
|
||||
|
||||
def custom_clone(aws_repo_url, awscli_profile, local_repo_directory, setup_tracking_branches):
|
||||
print("Initializing local repo with custom AWS CodeCommit config...")
|
||||
initial_directory = os.getcwd()
|
||||
os.chdir(local_repo_directory)
|
||||
init_git_repo(aws_repo_url, awscli_profile, local_repo_directory)
|
||||
os.chdir(initial_directory)
|
||||
|
||||
repo = git.Repo(local_repo_directory)
|
||||
|
||||
print(f"Fetching from remote: {aws_repo_url}")
|
||||
repo.remote().fetch() # Fetch branches
|
||||
repo.remote().fetch("--tags") # Fetch tags
|
||||
|
||||
if setup_tracking_branches:
|
||||
for remote_branch in repo.remote().refs:
|
||||
branch_name = remote_branch.remote_head
|
||||
repo.create_head(branch_name, remote_branch) \
|
||||
.set_tracking_branch(remote_branch)
|
||||
|
||||
return repo
|
||||
Reference in New Issue
Block a user