mirror of
https://github.com/discourse/discourse.git
synced 2025-06-10 07:38:03 +08:00
work in progress, admin page for upgrades (provides source lives in git)
This commit is contained in:
69
lib/upgrade/git_repo.rb
Normal file
69
lib/upgrade/git_repo.rb
Normal file
@ -0,0 +1,69 @@
|
||||
module Upgrade; end
|
||||
|
||||
# like Grit just very very minimal
|
||||
class Upgrade::GitRepo
|
||||
attr_reader :path
|
||||
|
||||
def initialize(path)
|
||||
@path = path
|
||||
@memoize = {}
|
||||
end
|
||||
|
||||
def valid?
|
||||
File.directory?("#{path}/.git")
|
||||
end
|
||||
|
||||
def latest_local_commit
|
||||
run "rev-parse --short HEAD"
|
||||
end
|
||||
|
||||
def latest_origin_commit
|
||||
run "rev-parse --short #{tracking_branch}"
|
||||
end
|
||||
|
||||
def latest_origin_commit_date
|
||||
commit_date(latest_origin_commit)
|
||||
end
|
||||
|
||||
def latest_local_commit_date
|
||||
commit_date(latest_local_commit)
|
||||
end
|
||||
|
||||
def commits_behind
|
||||
run("rev-list --count #{tracking_branch}..HEAD").to_i
|
||||
end
|
||||
|
||||
def url
|
||||
url = run "config --get remote.origin.url"
|
||||
if url =~ /^git/
|
||||
# hack so it works with git urls
|
||||
url = "https://github.com/#{url.split(":")[1]}"
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def commit_date(commit)
|
||||
unix_timestamp = run('show -s --format="%ct" ' << commit).to_i
|
||||
Time.at(unix_timestamp).to_datetime
|
||||
end
|
||||
|
||||
def tracking_branch
|
||||
run "for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)"
|
||||
end
|
||||
|
||||
def ensure_updated
|
||||
@updated ||= Thread.new do
|
||||
# this is a very slow operation, make it async
|
||||
`cd #{path} && git remote update`
|
||||
end
|
||||
end
|
||||
|
||||
def run(cmd)
|
||||
ensure_updated
|
||||
@memoize[cmd] ||= `cd #{path} && git #{cmd}`.strip
|
||||
rescue => e
|
||||
p e
|
||||
end
|
||||
|
||||
end
|
Reference in New Issue
Block a user