forked from swiftlang/swift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate-checkout
executable file
·88 lines (68 loc) · 2.93 KB
/
update-checkout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env python
#===--- update-checkout - Utility to update your local checkouts -----------===#
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See http://swift.org/LICENSE.txt for license information
# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
#
#===------------------------------------------------------------------------===#
from __future__ import print_function
import argparse
import os
import sys
sys.path.append(os.path.dirname(__file__))
from SwiftBuildSupport import *
def update_git_svn(repo_path):
with WorkingDirectory(repo_path):
use_stash = (check_output([ "git", "status", "--porcelain" ]) != "")
if use_stash:
check_call([ "git", "stash", "save", "--all"])
# Try first to pull from an upstream Git repo, assuming there is one
if check_output([ "git", "remote" ]) != "":
check_call([ "git", "pull", "--rebase" ])
check_call([ "git", "svn", "rebase", "-l" ])
else:
check_call([ "git", "svn", "rebase" ])
if use_stash:
check_call([ "git", "stash", "pop" ])
def update_working_copy(repo_path):
if not os.path.isdir(repo_path):
return
print("--- Updating '" + repo_path + "' ---")
with WorkingDirectory(repo_path):
if os.path.isdir(os.path.join(".git", "svn")):
update_git_svn(repo_path)
elif os.path.isdir(".git"):
check_call([ "git", "pull" ])
else:
check_call([ "svn", "update" ])
def main():
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
description="""
repositories.
By default, updates your checkouts of Swift, SourceKit, LLDB, and SwiftPM.""")
parser.add_argument("-a", "--all",
help="also update checkouts of llbuild, LLVM, and Clang",
action="store_true")
args = parser.parse_args()
if args.all:
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "llbuild"))
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "llvm"))
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "clang"))
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "swift"))
update_working_copy(
os.path.join(SWIFT_SOURCE_ROOT, "swift", "benchmark", "PerfTestSuite"))
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "SourceKit"))
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "cmark"))
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "lldb"))
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "swiftpm"))
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "swift-corelibs-foundation"))
update_working_copy(os.path.join(SWIFT_SOURCE_ROOT, "swift-corelibs-xctest"))
return 0
if __name__ == "__main__":
sys.exit(main())