mirror of
https://github.com/cmderdev/cmder.git
synced 2026-03-03 01:16:07 +08:00
Compare commits
38 Commits
copilot/ad
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
adbd6322f6 | ||
|
|
7f22d2eb73 | ||
|
|
573bf6ebfb | ||
|
|
05de4f606a | ||
|
|
c8495a0f58 | ||
|
|
6593acf8c8 | ||
|
|
0c6b2d9900 | ||
|
|
66ab9ad6f7 | ||
|
|
6137073ba3 | ||
|
|
6858619614 | ||
|
|
002282636a | ||
|
|
48cc28a634 | ||
|
|
e71c7679f6 | ||
|
|
c06d852248 | ||
|
|
ee967279d0 | ||
|
|
dc93fa5d1b | ||
|
|
684185ca8a | ||
|
|
2780a43323 | ||
|
|
641ce7b1e8 | ||
|
|
a52b0b9e10 | ||
|
|
825df3aace | ||
|
|
a937901e82 | ||
|
|
27c7a0cdc6 | ||
|
|
838c1cfaa3 | ||
|
|
bff3862ad4 | ||
|
|
2057ee58b0 | ||
|
|
9e6e1485b0 | ||
|
|
baef798b6c | ||
|
|
865d0c1858 | ||
|
|
60848f56c5 | ||
|
|
b86fca35bc | ||
|
|
0bc7fd3aaa | ||
|
|
1e04711a21 | ||
|
|
3810b8d258 | ||
|
|
d05d03117a | ||
|
|
6ba699a3c4 | ||
|
|
13dd021d6a | ||
|
|
c3f239267d |
4
.github/dependabot.yml
vendored
4
.github/dependabot.yml
vendored
@@ -5,7 +5,11 @@
|
|||||||
|
|
||||||
version: 2
|
version: 2
|
||||||
updates:
|
updates:
|
||||||
|
# Enable version updates for GitHub Actions
|
||||||
- package-ecosystem: "github-actions" # See documentation for possible values
|
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||||
directory: "/" # Location of package manifests
|
directory: "/" # Location of package manifests
|
||||||
schedule:
|
schedule:
|
||||||
interval: "weekly"
|
interval: "weekly"
|
||||||
|
labels:
|
||||||
|
- "👆 Dependencies"
|
||||||
|
- "🔄️ GitHub Actions"
|
||||||
|
|||||||
219
.github/workflows/build.yml
vendored
219
.github/workflows/build.yml
vendored
@@ -42,17 +42,61 @@ jobs:
|
|||||||
- name: Summary - Repository checkout
|
- name: Summary - Repository checkout
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "## 📦 Build Cmder - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
|
# Get Cmder version
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
. scripts/utils.ps1
|
||||||
echo "### Repository Information" >> $env:GITHUB_STEP_SUMMARY
|
$cmderVersion = Get-VersionStr
|
||||||
echo "| Property | Value |" >> $env:GITHUB_STEP_SUMMARY
|
$buildTime = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
|
||||||
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "| Repository | \`${{ github.repository }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
# Determine branch link (handle PR merge refs)
|
||||||
echo "| Branch | \`${{ github.ref_name }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
$branchName = "${{ github.ref_name }}"
|
||||||
echo "| Commit | \`${{ github.sha }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
$branchLink = ""
|
||||||
echo "| Actor | @${{ github.actor }} |" >> $env:GITHUB_STEP_SUMMARY
|
if ($branchName -match '^(\d+)/(merge|head)$') {
|
||||||
echo "| Workflow | \`${{ github.workflow }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
# This is a PR merge/head ref, link to the PR
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
$prNumber = $Matches[1]
|
||||||
|
$branchLink = "https://github.com/${{ github.repository }}/pull/$prNumber"
|
||||||
|
} elseif ("${{ github.event_name }}" -eq "pull_request") {
|
||||||
|
# This is a pull request event, link to the PR
|
||||||
|
$branchLink = "https://github.com/${{ github.repository }}/pull/${{ github.event.pull_request.number }}"
|
||||||
|
} else {
|
||||||
|
# Regular branch, link to the branch tree
|
||||||
|
$branchLink = "https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}"
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary = @"
|
||||||
|
## 📦 Build Cmder - Workflow Summary
|
||||||
|
|
||||||
|
<small>Build started: $buildTime</small>
|
||||||
|
|
||||||
|
### Repository Information
|
||||||
|
| Property | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Repository | [``${{ github.repository }}``](https://github.com/${{ github.repository }}) |
|
||||||
|
| Branch | [``$branchName``]($branchLink) |
|
||||||
|
| Commit | [``${{ github.sha }}``](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) |
|
||||||
|
| Actor | [@${{ github.actor }}](https://github.com/${{ github.actor }}) |
|
||||||
|
| Workflow | ``${{ github.workflow }}`` |
|
||||||
|
| Cmder Version | **$cmderVersion** |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📁 Vendor Packages
|
||||||
|
| Package | Version |
|
||||||
|
| --- | --- |
|
||||||
|
"@
|
||||||
|
|
||||||
|
# Read vendor sources.json and add to summary
|
||||||
|
$vendorSources = Get-Content "vendor/sources.json" | ConvertFrom-Json
|
||||||
|
if ($vendorSources.Count -eq 0) {
|
||||||
|
$summary += "`n| _No vendor packages found_ | |"
|
||||||
|
} else {
|
||||||
|
foreach ($vendor in $vendorSources) {
|
||||||
|
$summary += "`n| ``$($vendor.name)`` | $($vendor.version) |"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary += "`n"
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Add MSBuild to PATH
|
- name: Add MSBuild to PATH
|
||||||
uses: microsoft/setup-msbuild@v2
|
uses: microsoft/setup-msbuild@v2
|
||||||
@@ -66,57 +110,44 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "### ✅ Build Status" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "Cmder launcher successfully compiled." >> $env:GITHUB_STEP_SUMMARY
|
---
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
### Build Status
|
||||||
|
|
||||||
|
✅ Cmder built successfully.
|
||||||
|
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Pack the built files
|
- name: Pack the built files
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
working-directory: scripts
|
working-directory: scripts
|
||||||
run: .\pack.ps1 -verbose
|
run: .\pack.ps1 -verbose
|
||||||
|
|
||||||
- name: Summary - Package artifacts
|
|
||||||
if: success()
|
|
||||||
shell: pwsh
|
|
||||||
run: |
|
|
||||||
echo "### 📦 Artifacts Created" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "| Artifact | Size | Hash (SHA256) |" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "| --- | --- | --- |" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
$artifacts = @("cmder.zip", "cmder.7z", "cmder_mini.zip")
|
|
||||||
foreach ($artifact in $artifacts) {
|
|
||||||
$path = "build/$artifact"
|
|
||||||
if (Test-Path $path) {
|
|
||||||
$size = (Get-Item $path).Length / 1MB
|
|
||||||
# Truncate hash to first 16 chars for summary readability (full hash in hashes.txt)
|
|
||||||
$hash = (Get-FileHash $path -Algorithm SHA256).Hash.Substring(0, 16)
|
|
||||||
echo "| \`$artifact\` | $([math]::Round($size, 2)) MB | \`$hash...\` |" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
|
||||||
- name: Upload artifact (cmder.zip)
|
- name: Upload artifact (cmder.zip)
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
path: build/cmder.zip
|
path: build/cmder.zip
|
||||||
name: cmder.zip
|
name: cmder.zip
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Upload artifact (cmder.7z)
|
- name: Upload artifact (cmder.7z)
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
path: build/cmder.7z
|
path: build/cmder.7z
|
||||||
name: cmder.7z
|
name: cmder.7z
|
||||||
|
|
||||||
- name: Upload artifact (cmder_mini.zip)
|
- name: Upload artifact (cmder_mini.zip)
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
path: build/cmder_mini.zip
|
path: build/cmder_mini.zip
|
||||||
name: cmder_mini.zip
|
name: cmder_mini.zip
|
||||||
|
|
||||||
- name: Upload artifact (hashes.txt)
|
- name: Upload artifact (hashes.txt)
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
path: build/hashes.txt
|
path: build/hashes.txt
|
||||||
name: hashes.txt
|
name: hashes.txt
|
||||||
@@ -124,15 +155,82 @@ jobs:
|
|||||||
- name: Summary - Artifacts uploaded
|
- name: Summary - Artifacts uploaded
|
||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
run: |
|
run: |
|
||||||
echo "### ☁️ Upload Status" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "All artifacts successfully uploaded to GitHub Actions:" >> $env:GITHUB_STEP_SUMMARY
|
---
|
||||||
echo "- ✅ \`cmder.zip\`" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "- ✅ \`cmder.7z\`" >> $env:GITHUB_STEP_SUMMARY
|
### 🗃️ Artifacts
|
||||||
echo "- ✅ \`cmder_mini.zip\`" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "- ✅ \`hashes.txt\`" >> $env:GITHUB_STEP_SUMMARY
|
| Artifact | Size | Download | Hash (SHA256) |
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
| --- | --- | --- | --- |
|
||||||
|
"@
|
||||||
|
|
||||||
|
# Function to get artifact download URL with retry logic
|
||||||
|
function Get-ArtifactDownloadUrl {
|
||||||
|
param(
|
||||||
|
[string]$ArtifactName,
|
||||||
|
[int]$MaxRetries = 3,
|
||||||
|
[int]$DelaySeconds = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
for ($i = 0; $i -lt $MaxRetries; $i++) {
|
||||||
|
try {
|
||||||
|
# Use GitHub CLI to get artifact information
|
||||||
|
$artifactsJson = gh api "repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts" --jq ".artifacts[] | select(.name == `"$ArtifactName`")"
|
||||||
|
|
||||||
|
if ($artifactsJson) {
|
||||||
|
$artifact = $artifactsJson | ConvertFrom-Json
|
||||||
|
if ($artifact.archive_download_url) {
|
||||||
|
return $artifact.archive_download_url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Write-Host "Attempt $($i + 1) failed to get artifact URL for $ArtifactName : $_"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($i -lt ($MaxRetries - 1)) {
|
||||||
|
Start-Sleep -Seconds $DelaySeconds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
|
$artifacts = @("cmder.zip", "cmder.7z", "cmder_mini.zip", "hashes.txt")
|
||||||
|
foreach ($artifact in $artifacts) {
|
||||||
|
$path = "build/$artifact"
|
||||||
|
if (Test-Path $path) {
|
||||||
|
$size = (Get-Item $path).Length / 1MB
|
||||||
|
$hash = (Get-FileHash $path -Algorithm SHA256).Hash
|
||||||
|
|
||||||
|
# Try to get the actual artifact download URL
|
||||||
|
$downloadUrl = Get-ArtifactDownloadUrl -ArtifactName $artifact
|
||||||
|
$warning = ""
|
||||||
|
|
||||||
|
if (-not $downloadUrl) {
|
||||||
|
# Fallback to workflow run page if artifact URL fetch fails
|
||||||
|
$downloadUrl = "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
|
$warning = " ⚠️"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Determine emoji based on file type
|
||||||
|
if ($artifact -match '\.txt$') {
|
||||||
|
$emoji = "📄"
|
||||||
|
} elseif ($artifact -match '\.(zip|7z)$') {
|
||||||
|
$emoji = "🗄️"
|
||||||
|
} else {
|
||||||
|
$emoji = "📦"
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary += "`n| $emoji ``$artifact`` | $([math]::Round($size, 2)) MB | [📥 Download$warning]($downloadUrl) | ``$hash`` |"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$summary += "`n"
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
@@ -150,13 +248,20 @@ jobs:
|
|||||||
if: startsWith(github.ref, 'refs/tags/')
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "### 🚀 Release Information" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "Draft release created for tag: **\`${{ github.ref_name }}\`**" >> $env:GITHUB_STEP_SUMMARY
|
---
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "Release includes:" >> $env:GITHUB_STEP_SUMMARY
|
### Release Information
|
||||||
echo "- Full version (\`cmder.zip\`, \`cmder.7z\`)" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "- Mini version (\`cmder_mini.zip\`)" >> $env:GITHUB_STEP_SUMMARY
|
🚀 Draft release created for tag: **``${{ github.ref_name }}``**
|
||||||
echo "- File hashes (\`hashes.txt\`)" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
Release includes:
|
||||||
echo "> ⚠️ Release is in **draft** mode. Please review and publish manually." >> $env:GITHUB_STEP_SUMMARY
|
- Full version (``cmder.zip``, ``cmder.7z``)
|
||||||
|
- Mini version (``cmder_mini.zip``)
|
||||||
|
- File hashes (``hashes.txt``)
|
||||||
|
|
||||||
|
> ⚠️ Release is in **draft** mode. Please review and publish manually.
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|||||||
56
.github/workflows/codeql.yml
vendored
56
.github/workflows/codeql.yml
vendored
@@ -50,17 +50,21 @@ jobs:
|
|||||||
- name: Summary - CodeQL analysis started
|
- name: Summary - CodeQL analysis started
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "## 🔒 CodeQL Security Analysis - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
## 🔒 CodeQL Security Analysis - Workflow Summary
|
||||||
echo "### Analysis Configuration" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
### Analysis Configuration
|
||||||
echo "| Property | Value |" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
|
| Property | Value |
|
||||||
echo "| Repository | \`${{ github.repository }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
| --- | --- |
|
||||||
echo "| Branch | \`${{ github.ref_name }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
| Repository | ``${{ github.repository }}`` |
|
||||||
echo "| Language | \`${{ matrix.language }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
| Branch | ``${{ github.ref_name }}`` |
|
||||||
echo "| Commit | \`${{ github.sha }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
| Language | ``${{ matrix.language }}`` |
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
| Commit | ``${{ github.sha }}`` |
|
||||||
|
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
@@ -86,10 +90,14 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "### ✅ Build Completed" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
### ✅ Build Completed
|
||||||
echo "Cmder launcher built successfully for CodeQL analysis." >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
Cmder launcher built successfully for CodeQL analysis.
|
||||||
|
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v4
|
uses: github/codeql-action/analyze@v4
|
||||||
@@ -100,10 +108,14 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "### 🔍 CodeQL Analysis Results" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
### 🔍 CodeQL Analysis Results
|
||||||
echo "✅ CodeQL security analysis completed successfully." >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
✅ CodeQL security analysis completed successfully.
|
||||||
echo "**Language analyzed:** \`${{ matrix.language }}\`" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
**Language analyzed:** ``${{ matrix.language }}``
|
||||||
echo "> Check the Security tab for detailed findings and recommendations." >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
> Check the Security tab for detailed findings and recommendations.
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|||||||
104
.github/workflows/tests.yml
vendored
104
.github/workflows/tests.yml
vendored
@@ -39,20 +39,33 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Summary - Test execution started
|
- name: Summary - Test execution started
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "## 🧪 Run Tests - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
|
# Get Cmder version
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
. scripts/utils.ps1
|
||||||
echo "### Test Environment" >> $env:GITHUB_STEP_SUMMARY
|
$cmderVersion = Get-VersionStr
|
||||||
echo "| Property | Value |" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "| Repository | \`${{ github.repository }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
## ✅ Run Tests - Workflow Summary
|
||||||
echo "| Branch | \`${{ github.ref_name }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "| Commit | \`${{ github.sha }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
### Test Environment
|
||||||
echo "| Runner OS | \`${{ runner.os }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
| Property | Value |
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
| --- | --- |
|
||||||
|
| Repository | ``${{ github.repository }}`` |
|
||||||
|
| Branch | ``${{ github.ref_name }}`` |
|
||||||
|
| Commit | ``${{ github.sha }}`` |
|
||||||
|
| Runner OS | ``${{ runner.os }}`` |
|
||||||
|
| Cmder Version | **$cmderVersion** |
|
||||||
|
| PowerShell Version | **$($PSVersionTable.PSVersion)** |
|
||||||
|
| Event | ``${{ github.event_name }}`` |
|
||||||
|
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Initialize vendors
|
- name: Initialize vendors
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
@@ -63,21 +76,51 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "### ⚙️ Vendor Initialization" >> $env:GITHUB_STEP_SUMMARY
|
# Get vendor versions from sources.json
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
$vendorInfo = @()
|
||||||
echo "✅ Vendor dependencies initialized successfully." >> $env:GITHUB_STEP_SUMMARY
|
$sources = Get-Content "vendor\sources.json" -Raw | ConvertFrom-Json
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
$vendorDirs = $sources.PSObject.Properties | ForEach-Object { $_.Name }
|
||||||
|
foreach ($dir in $vendorDirs) {
|
||||||
|
$versionFile = "vendor/$dir/.cmderver"
|
||||||
|
if (Test-Path $versionFile) {
|
||||||
|
$version = Get-Content $versionFile -Raw
|
||||||
|
$vendorInfo += "- **$dir**: $($version.Trim())"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary = @"
|
||||||
|
### ⚙️ Vendor Initialization
|
||||||
|
|
||||||
|
✅ Vendor dependencies initialized successfully.
|
||||||
|
|
||||||
|
**Vendor Versions:**
|
||||||
|
"@
|
||||||
|
|
||||||
|
$(
|
||||||
|
if ($vendorInfo.Count -eq 0) {
|
||||||
|
$summary += "_No vendor version information available._"
|
||||||
|
} else {
|
||||||
|
$summary += $vendorInfo -join '`n'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Summary - Test results table header
|
- name: Summary - Test results table header
|
||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "### 📋 Test Results" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
### 📋 Test Results
|
||||||
echo "| Test | Status |" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
|
| Test | Status | Duration |
|
||||||
|
| --- | --- | --- |
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Testing Clink Shell
|
- name: Testing Clink Shell
|
||||||
|
id: test-clink
|
||||||
run: |
|
run: |
|
||||||
cmd /c vendor\init.bat /v /d /t
|
cmd /c vendor\init.bat /v /d /t
|
||||||
|
|
||||||
@@ -85,8 +128,9 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "| Clink Shell | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
|
"| Clink Shell | ✅ Passed | Cmd shell initialization |" | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
- name: Testing PowerShell
|
- name: Testing PowerShell
|
||||||
|
id: test-powershell
|
||||||
run: |
|
run: |
|
||||||
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "$env:CMDER_DEBUG='1'; . 'vendor\profile.ps1'"
|
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "$env:CMDER_DEBUG='1'; . 'vendor\profile.ps1'"
|
||||||
|
|
||||||
@@ -94,8 +138,9 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "| PowerShell | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
|
"| PowerShell | ✅ Passed | Profile script execution |" | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
- name: Testing Bash
|
- name: Testing Bash
|
||||||
|
id: test-bash
|
||||||
run: |
|
run: |
|
||||||
bash vendor/cmder.sh
|
bash vendor/cmder.sh
|
||||||
|
|
||||||
@@ -103,13 +148,22 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "| Bash | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
|
"| Bash | ✅ Passed | Bash environment initialization |" | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Summary - All tests completed
|
- name: Summary - All tests completed
|
||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "### ✅ All Tests Completed" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
### ✅ All Tests Completed
|
||||||
echo "All shell environments tested successfully!" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
All shell environments tested successfully!
|
||||||
|
|
||||||
|
**Test Coverage:**
|
||||||
|
- ✅ Clink shell environment (Windows cmd.exe with Clink)
|
||||||
|
- ✅ PowerShell environment (with Cmder profile)
|
||||||
|
- ✅ Bash environment (Git Bash integration)
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|||||||
93
.github/workflows/vendor.yml
vendored
93
.github/workflows/vendor.yml
vendored
@@ -31,52 +31,63 @@ jobs:
|
|||||||
- name: Summary - Workflow started
|
- name: Summary - Workflow started
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "## 📦 Update Vendor - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
## 📦 Update Vendor - Workflow Summary
|
||||||
echo "Checking for vendor dependency updates..." >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
Checking for vendor dependency updates...
|
||||||
|
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- id: make-changes
|
- id: make-changes
|
||||||
name: Checking for updates
|
name: Checking for updates
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
||||||
. .\scripts\update.ps1 -verbose
|
. .\scripts\update.ps1 -verbose
|
||||||
Set-GHVariable -Name COUNT_UPDATED -Value $count
|
Set-GHVariable -Name COUNT_UPDATED -Value $count
|
||||||
$newVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
$newVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
||||||
$listUpdated = ""
|
$listUpdated = ""
|
||||||
$updateMessage = "| Name | Old Version | New Version |`n| :--- | ---- | ---- |`n"
|
$updateMessage = "| Name | Old Version | New Version |`n| :--- | ---- | ---- |`n"
|
||||||
foreach ($s in $newVersion) {
|
foreach ($s in $newVersion) {
|
||||||
$oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version
|
$oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version
|
||||||
if ($s.version -ne $oldVersion) {
|
if ($s.version -ne $oldVersion) {
|
||||||
$repoUrl = ($repoUrl = $s.Url.Replace("/archive/", "/releases/")).Substring(0, $repoUrl.IndexOf("/releases/")) + "/releases"
|
$repoUrl = ($repoUrl = $s.Url.Replace("/archive/", "/releases/")).Substring(0, $repoUrl.IndexOf("/releases/")) + "/releases"
|
||||||
$listUpdated += "$($s.name) v$($s.version), "
|
$listUpdated += "$($s.name) v$($s.version), "
|
||||||
$updateMessage += "| **[$($s.name)]($repoUrl)** | $oldVersion | **$($s.version)** |`n"
|
$updateMessage += "| **[$($s.name)]($repoUrl)** | $oldVersion | **$($s.version)** |`n"
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ($count -eq 0) { return }
|
}
|
||||||
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
|
if ($count -eq 0) { return }
|
||||||
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
|
||||||
|
|
||||||
|
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||||
|
|
||||||
- name: Summary - Update check results
|
- name: Summary - Update check results
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
$count = $env:COUNT_UPDATED
|
$count = [int]$env:COUNT_UPDATED
|
||||||
if ($count -eq 0) {
|
if ($count -eq 0) {
|
||||||
echo "### ✅ No Updates Available" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
### ✅ No Updates Available
|
||||||
echo "All vendor dependencies are up to date." >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
All vendor dependencies are up to date.
|
||||||
|
"@
|
||||||
} else {
|
} else {
|
||||||
$word = if ($count -eq 1) { 'dependency' } else { 'dependencies' }
|
$word = if ($count -eq 1) { 'dependency' } else { 'dependencies' }
|
||||||
echo "### 🔄 Updates Found" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
### 🔄 Updates Found
|
||||||
echo "**$count** vendor $word updated:" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
**$count** vendor $word updated:
|
||||||
echo "$env:UPDATE_MESSAGE" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
$env:UPDATE_MESSAGE
|
||||||
|
|
||||||
|
"@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- uses: peter-evans/create-pull-request@v7
|
- uses: peter-evans/create-pull-request@v7
|
||||||
if: env.COUNT_UPDATED > 0
|
if: env.COUNT_UPDATED > 0
|
||||||
with:
|
with:
|
||||||
@@ -94,12 +105,16 @@ jobs:
|
|||||||
if: env.COUNT_UPDATED > 0
|
if: env.COUNT_UPDATED > 0
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "### 🎉 Pull Request Created" >> $env:GITHUB_STEP_SUMMARY
|
$Summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
### 🎉 Pull Request Created
|
||||||
echo "A pull request has been created to update the vendor dependencies." >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
A pull request has been created to update the vendor dependencies.
|
||||||
echo "**Branch:** \`update-vendor\`" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
**Branch:** ``update-vendor``
|
||||||
echo "**Updated dependencies:** $env:LIST_UPDATED" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
**Updated dependencies:** $env:LIST_UPDATED
|
||||||
echo "> Please review and merge the pull request to apply the updates." >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
> Please review and merge the pull request to apply the updates.
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|||||||
79
CHANGELOG.md
79
CHANGELOG.md
@@ -1,5 +1,84 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## [1.3.25](https://github.com/cmderdev/cmder/tree/v1.3.25) (2024-05-31)
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
- Component Updates
|
||||||
|
- Update Git for Windows to 2.45.1.windows.1.
|
||||||
|
- Update ConEmu to 24.05.31.
|
||||||
|
- Clink 1.6.14.
|
||||||
|
- clink-completions 0.5.2.
|
||||||
|
|
||||||
|
- Add `SECURITY.md` and refresh CI workflows and actions.
|
||||||
|
- Enable `match.expand_envvars` and improve git diagnostics for improper versions.
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- Fix #2944.
|
||||||
|
- Fix script error when the working directory contains `%`.
|
||||||
|
- Remove environment refresh race condition.
|
||||||
|
|
||||||
|
## [1.3.24](https://github.com/cmderdev/cmder/tree/v1.3.24) (2023-07-24)
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
- Update `build.yml` workflow.
|
||||||
|
|
||||||
|
## [1.3.23](https://github.com/cmderdev/cmder/tree/v1.3.23) (2023-07-24)
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
- Update ConEmu (conemu-maximus5) to 23.07.24.
|
||||||
|
|
||||||
|
## [1.3.22](https://github.com/cmderdev/cmder/tree/v1.3.22) (2023-07-24)
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
- Handle Clink injction differently in `init.bat`.
|
||||||
|
- Changes to `clink_settings.lua.default`.
|
||||||
|
- Do not add commands to Clink Command Line History that begin with whitespace as a default.
|
||||||
|
- This can be changed to the old behavior by setting `history_ignore_space` to `0` in `config\clink_settings.lua`.
|
||||||
|
- `history.max_lines` is now defaults to `25000` instead of `10000`.
|
||||||
|
- This can be changed back to the old behavior by setting `history_max_lines` to `10000` in `config\clink_settings.lua`.
|
||||||
|
- `history.shared` now defaults to `False` instead of `True`.
|
||||||
|
- The previous default of `True` was causing issues with some users when using Cmder in multiple sessions.
|
||||||
|
- This can be changed back to the old behavior by setting `history_shared` to `1` in `config\clink_settings.lua`.
|
||||||
|
|
||||||
|
- Component Updates
|
||||||
|
- Git for Windows to 2.41.0.windows.3
|
||||||
|
- Clink to 1.5.1
|
||||||
|
- ConEmu to 23.07.23
|
||||||
|
- clink-completions to 0.4.10
|
||||||
|
|
||||||
|
- Remove AppVeyor configuration and add CodeQL scanning and Dependabot updates.
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- Fix `/task "<taskName>"` handling.
|
||||||
|
- Skip clink injection when initialization fails fatally.
|
||||||
|
- Fix errors when git/svn/hg are not installed and in profile.d PowerShell scripts.
|
||||||
|
|
||||||
|
## [1.3.21](https://github.com/cmderdev/cmder/tree/v1.3.21) (2022-12-19)
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- Fix #2789.
|
||||||
|
- Fix Git Bash `GIT_INSTALL_ROOT` handling.
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
- Refactor `clink.lua` to speed up the prompt.
|
||||||
|
- Refactor and Cleanup `init.bat` and related scripts.
|
||||||
|
- Refactor and Cleanup `profile.ps1` and related scripts.
|
||||||
|
- Remove handling of `clink` and `tcc` incompatibility.
|
||||||
|
- Update ConEmu to mitigate CVE-2022-46387.
|
||||||
|
- Update Git for Windows to 2.39.0.windows.1 and Clink to 1.4.4.
|
||||||
|
|
||||||
|
### Adds
|
||||||
|
|
||||||
|
- Add `show_warning` function to `vendor\lib\lib_console.cmd` for showing warning messages in yellow.
|
||||||
|
|
||||||
## [1.3.20](https://github.com/cmderdev/cmder/tree/v1.3.20) (2022-03-18)
|
## [1.3.20](https://github.com/cmderdev/cmder/tree/v1.3.20) (2022-03-18)
|
||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
|
|||||||
116
vendor/clink.lua
vendored
116
vendor/clink.lua
vendored
@@ -324,7 +324,7 @@ end
|
|||||||
-- Find out current branch
|
-- Find out current branch
|
||||||
-- @return {nil|git branch name}
|
-- @return {nil|git branch name}
|
||||||
---
|
---
|
||||||
local function get_git_branch(git_dir)
|
local function get_git_branch(git_dir, fast)
|
||||||
git_dir = git_dir or get_git_dir()
|
git_dir = git_dir or get_git_dir()
|
||||||
|
|
||||||
-- If git directory not found then we're probably outside of repo
|
-- If git directory not found then we're probably outside of repo
|
||||||
@@ -341,8 +341,90 @@ local function get_git_branch(git_dir)
|
|||||||
-- if HEAD matches branch expression, then we're on named branch
|
-- if HEAD matches branch expression, then we're on named branch
|
||||||
-- otherwise it is a detached commit
|
-- otherwise it is a detached commit
|
||||||
local branch_name = HEAD:match('ref: refs/heads/(.+)')
|
local branch_name = HEAD:match('ref: refs/heads/(.+)')
|
||||||
|
if os.getenv("CLINK_DEBUG_GIT_REFTABLE") then
|
||||||
|
branch_name = '.invalid'
|
||||||
|
end
|
||||||
|
|
||||||
return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
|
-- If the branch name is ".invalid" and the fast method wasn't requested,
|
||||||
|
-- then invoke git.exe to get accurate current branch info (slow method).
|
||||||
|
if branch_name == ".invalid" and not fast then
|
||||||
|
local file
|
||||||
|
branch_name = nil
|
||||||
|
|
||||||
|
-- Handle the most common case first.
|
||||||
|
if not branch_name then
|
||||||
|
file = io_popenyield("git --no-optional-locks branch 2>nul")
|
||||||
|
if file then
|
||||||
|
for line in file:lines() do
|
||||||
|
local b = line:match("^%*%s+(.*)")
|
||||||
|
if b then
|
||||||
|
b = b:match("^%((HEAD detached at .*)%)") or b
|
||||||
|
branch_name = b
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Handle the cases where "git branch" output is empty, but "git
|
||||||
|
-- branch --show-current" shows the branch name (e.g. a new repo).
|
||||||
|
if not branch_name then
|
||||||
|
file = io_popenyield("git --no-optional-locks branch --show-current 2>nul")
|
||||||
|
if file then
|
||||||
|
for line in file:lines() do -- luacheck: ignore 512
|
||||||
|
branch_name = line
|
||||||
|
break
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
branch_name = branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
|
||||||
|
end
|
||||||
|
|
||||||
|
return branch_name
|
||||||
|
end
|
||||||
|
|
||||||
|
local function get_git_remote(git_dir, branch)
|
||||||
|
if not git_dir then return nil end
|
||||||
|
if not branch then return nil end
|
||||||
|
|
||||||
|
local file = io.open(git_dir.."/config", 'r')
|
||||||
|
if not file then return nil end
|
||||||
|
|
||||||
|
local git_config = {}
|
||||||
|
|
||||||
|
local function get_git_config_value(section, param)
|
||||||
|
return git_config[section] and git_config[section][param] or nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local section
|
||||||
|
for line in file:lines() do
|
||||||
|
if (line:sub(1,1) == "[" and line:sub(-1) == "]") then
|
||||||
|
if (line:sub(2,5) == "lfs ") then
|
||||||
|
section = nil -- skip LFS entries as there can be many and we never use them
|
||||||
|
else
|
||||||
|
section = line:sub(2,-2)
|
||||||
|
git_config[section] = git_config[section] or {}
|
||||||
|
end
|
||||||
|
elseif section then
|
||||||
|
local param, value = line:match('^%s-([%w|_]+)%s-=%s+(.+)$')
|
||||||
|
if (param and value ~= nil) then
|
||||||
|
git_config[section][param] = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
|
||||||
|
local remote_to_push = get_git_config_value('branch "'..branch..'"', 'remote') or ''
|
||||||
|
local remote_ref = get_git_config_value('remote "'..remote_to_push..'"', 'push') or
|
||||||
|
get_git_config_value('push', 'default')
|
||||||
|
|
||||||
|
local text = remote_to_push
|
||||||
|
if remote_ref then text = text..'/'..remote_ref end
|
||||||
|
|
||||||
|
return text ~= '' and text or nil
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -394,7 +476,7 @@ end
|
|||||||
-- Get the status and conflict status of working dir
|
-- Get the status and conflict status of working dir
|
||||||
-- @return {bool <status>, bool <is_conflict>}
|
-- @return {bool <status>, bool <is_conflict>}
|
||||||
---
|
---
|
||||||
local function get_git_status()
|
local function get_git_status(git_dir)
|
||||||
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
|
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
|
||||||
if not file then
|
if not file then
|
||||||
return {}
|
return {}
|
||||||
@@ -416,7 +498,10 @@ local function get_git_status()
|
|||||||
end
|
end
|
||||||
file:close()
|
file:close()
|
||||||
|
|
||||||
return { status = is_status, conflict = conflict_found }
|
local branch = get_git_branch(git_dir, false--[[fast]])
|
||||||
|
local remote = get_git_remote(git_dir, branch)
|
||||||
|
|
||||||
|
return { status = is_status, branch = branch, remote = remote, conflict = conflict_found }
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -515,11 +600,11 @@ end
|
|||||||
-- Use a prompt coroutine to get git status in the background.
|
-- Use a prompt coroutine to get git status in the background.
|
||||||
-- Cache the info so we can reuse it next time to reduce flicker.
|
-- Cache the info so we can reuse it next time to reduce flicker.
|
||||||
---
|
---
|
||||||
local function get_git_info_table()
|
local function get_git_info_table(git_dir)
|
||||||
local info = clink_promptcoroutine(function ()
|
local info = clink_promptcoroutine(function ()
|
||||||
-- Use git status if allowed.
|
-- Use git status if allowed.
|
||||||
local cmderGitStatusOptIn = get_git_status_setting()
|
local cmderGitStatusOptIn = get_git_status_setting()
|
||||||
return cmderGitStatusOptIn and get_git_status() or {}
|
return cmderGitStatusOptIn and get_git_status(git_dir) or {}
|
||||||
end)
|
end)
|
||||||
if not info then
|
if not info then
|
||||||
info = cached_info.git_info or {}
|
info = cached_info.git_info or {}
|
||||||
@@ -539,10 +624,11 @@ local function git_prompt_filter()
|
|||||||
local git_dir = get_git_dir()
|
local git_dir = get_git_dir()
|
||||||
local color
|
local color
|
||||||
if git_dir then
|
if git_dir then
|
||||||
local branch = get_git_branch(git_dir)
|
local branch = get_git_branch(git_dir, true--[[fast]])
|
||||||
if branch then
|
if branch then
|
||||||
-- If in a different repo or branch than last time, discard cached info.
|
-- If in a different repo or branch than last time, discard cached info.
|
||||||
if cached_info.git_dir ~= git_dir or cached_info.git_branch ~= branch then
|
if cached_info.git_dir ~= git_dir or
|
||||||
|
(branch ~= ".invalid" and cached_info.git_branch ~= branch) then
|
||||||
cached_info.git_info = nil
|
cached_info.git_info = nil
|
||||||
cached_info.git_dir = git_dir
|
cached_info.git_dir = git_dir
|
||||||
cached_info.git_branch = branch
|
cached_info.git_branch = branch
|
||||||
@@ -550,10 +636,22 @@ local function git_prompt_filter()
|
|||||||
|
|
||||||
-- If we're inside of git repo then try to detect current branch
|
-- If we're inside of git repo then try to detect current branch
|
||||||
-- Has branch => therefore it is a git folder, now figure out status
|
-- Has branch => therefore it is a git folder, now figure out status
|
||||||
local gitInfo = get_git_info_table()
|
local gitInfo = get_git_info_table(git_dir)
|
||||||
local gitStatus = gitInfo.status
|
local gitStatus = gitInfo.status
|
||||||
local gitConflict = gitInfo.conflict
|
local gitConflict = gitInfo.conflict
|
||||||
|
|
||||||
|
-- Compensate for git reftables.
|
||||||
|
branch = gitInfo.branch or branch
|
||||||
|
if branch == ".invalid" then
|
||||||
|
branch = "Loading..."
|
||||||
|
elseif gitInfo.remote then
|
||||||
|
branch = branch.." -> "..gitInfo.remote
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Prevent an older clink-completions git_prompt.lua scripts from
|
||||||
|
-- modifying the prompt.
|
||||||
|
branch = "\x1b[10m"..branch
|
||||||
|
|
||||||
if gitStatus == nil then
|
if gitStatus == nil then
|
||||||
color = get_unknown_color()
|
color = get_unknown_color()
|
||||||
elseif gitStatus then
|
elseif gitStatus then
|
||||||
|
|||||||
Reference in New Issue
Block a user