Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tool to bump JuliaSyntax version in Base #485

Merged
merged 1 commit into from
Aug 8, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions tools/bump_in_Base.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
function find_checksum_files(checksum_dir)
filter(readdir(checksum_dir, join=true)) do path
occursin(r"^JuliaSyntax-", basename(path))
end
end

function bump_in_Base(julia_dir, juliasyntax_dir, juliasyntax_branch_or_commit)
julia_git_dir = joinpath(julia_dir, ".git")
JuliaSyntax_git_dir = joinpath(juliasyntax_dir, ".git")
if !isdir(julia_git_dir)
@error "Julia .git directory not found" julia_git_dir
return 1
end
if !isdir(JuliaSyntax_git_dir)
@error "JuliaSyntax .git directory not found" JuliaSyntax_git_dir
return 1
end

@info "Vendoring JuliaSyntax into Base" julia_dir juliasyntax_branch_or_commit

remote_containing_branches = filter(b->occursin(r"^origin/(main|release-.*)$", b),
strip.(split(
read(`git --git-dir=$JuliaSyntax_git_dir branch -r --contains $juliasyntax_branch_or_commit`, String),
'\n', keepempty=false)))
if isempty(remote_containing_branches)
@warn "No remote main or release branches contain the given commit. This is ok for testing, but is otherwise an error." juliasyntax_branch_or_commit
else
@info "Given commit is accessible on remote branch" remote_containing_branches
end

commit_sha = strip(String(read(`git --git-dir=$JuliaSyntax_git_dir show -s --pretty=tformat:%H $juliasyntax_branch_or_commit`)))

cd(julia_dir) do
status = read(`git status --porcelain --untracked-files=no`, String)
if status != ""
@error "Julia git directory contains uncommitted changes" status=Text(status)
return 1
end

verfile_path = joinpath("deps", "JuliaSyntax.version")
@info "Updating JuliaSyntax.version" verfile_path
write(verfile_path, replace(read(verfile_path, String), r"JULIASYNTAX_SHA1.*"=>"JULIASYNTAX_SHA1 = "*commit_sha))
run(`git add $verfile_path`)

@info "Updating JuliaSyntax checksums"
deps_dir = "deps"
checksum_dir = joinpath(deps_dir, "checksums")
old_checksum_paths = find_checksum_files(checksum_dir)
if !isempty(old_checksum_paths)
run(`git rm -rf $old_checksum_paths`)
end
run(`make -C $deps_dir`)
run(`git add $(find_checksum_files(checksum_dir))`)

# Force rebuild of Base to include the newly vendored JuliaSyntax next time Julia is built.
# (TODO: fix the Makefile instead?)
touch("base/Base.jl")

@info "JuliaSyntax version updated. You can now test or commit the following changes"
run(`git diff --cached`)
end

return 0
end

if !isinteractive()
if length(ARGS) != 2
println("Usage: bump_in_Base.jl \$julia_dir \$juliasyntax_branch_or_commit")
exit(1)
else
juliasyntax_dir = dirname(@__DIR__)
exit(bump_in_Base(ARGS[1], juliasyntax_dir, ARGS[2]))
end
end

Loading