This repository has been archived by the owner on Oct 25, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 71
/
Git.ps1
102 lines (82 loc) · 3.27 KB
/
Git.ps1
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Author: Miodrag Milic <miodrag.milic@gmail.com>
# Last Change: 09-Nov-2016.
# https://www.appveyor.com/docs/how-to/git-push/
param(
$Info,
# Git username
[string] $User,
# Git password. You can use Github Token here if you omit username.
[string] $Password,
# Force git commit when package is updated but not pushed.
[switch] $Force,
# Add the package to the repository if it was created during the update process.
[switch] $AddNew,
# Commit strategy:
# single - 1 commit with all packages
# atomic - 1 commit per package
# atomictag - 1 commit and tag per package
[ValidateSet('single', 'atomic', 'atomictag')]
[string]$commitStrategy = 'single',
# Branch name
[string]$Branch = 'master'
)
[array]$packages = if ($Force) { $Info.result.updated } else { $Info.result.pushed }
if ($packages.Length -eq 0) { Write-Host "No package updated, skipping"; return }
$root = Split-Path $packages[0].Path
Push-Location $root
$origin = git config --get remote.origin.url
$origin -match '(?<=:/+)[^/]+' | Out-Null
$machine = $Matches[0]
if ($User -and $Password) {
Write-Host "Setting credentials for: $machine"
if ( "machine $server" -notmatch (Get-Content ~/_netrc)) {
Write-Host "Credentials already found for machine: $machine"
}
"machine $machine", "login $User", "password $Password" | Out-File -Append ~/_netrc -Encoding ascii
} elseif ($Password) {
Write-Host "Setting oauth token for: $machine"
git config --global credential.helper store
Add-Content "$env:USERPROFILE\.git-credentials" "https://${Password}:x-oauth-basic@$machine`n"
}
Write-Host "Checking out & resetting $Branch branch"
git checkout -q -B $Branch
Write-Host "Executing git pull"
git pull -q origin $Branch
$gitAddArgs = @()
if (-not $AddNew)
{
$gitAddArgs += @('--update')
}
if ($commitStrategy -like 'atomic*') {
$packages | ForEach-Object {
Write-Host "Adding update package to git repository: $($_.Name)"
git add @gitAddArgs $_.Path
git status
Write-Host "Commiting $($_.Name)"
$message = "AU: $($_.Name) upgraded from $($_.NuspecVersion) to $($_.RemoteVersion)"
$gist_url = $Info.plugin_results.Gist -split '\n' | Select-Object -Last 1
$snippet_url = $Info.plugin_results.Snippet -split '\n' | Select-Object -Last 1
git commit -m "$message`n[skip ci] $gist_url $snippet_url" --allow-empty
if ($commitStrategy -eq 'atomictag') {
$tagcmd = "git tag -a $($_.Name)-$($_.RemoteVersion) -m '$($_.Name)-$($_.RemoteVersion)'"
Invoke-Expression $tagcmd
}
}
}
else {
Write-Host "Adding updated packages to git repository: $( $packages | % Name)"
$packages | ForEach-Object { git add @gitAddArgs $_.Path }
git status
Write-Host "Commiting"
$message = "AU: $($packages.Length) updated - $($packages | % Name)"
$gist_url = $Info.plugin_results.Gist -split '\n' | Select-Object -Last 1
$snippet_url = $Info.plugin_results.Snippet -split '\n' | Select-Object -Last 1
git commit -m "$message`n[skip ci] $gist_url $snippet_url" --allow-empty
}
Write-Host "Pushing changes"
git push -q origin $Branch
if ($commitStrategy -eq 'atomictag') {
write-host 'Atomic Tag Push'
git push -q --tags
}
Pop-Location