FIX: Do not shorten commit hashes for compare links (#128)

Using `git rev-parse --short` will adapt the number of characters based on the number of commits in the repository. In a development checkout of Discourse, it'll currently output 10 characters, making the chance of a collision minuscule.

However, in production we use a shallow clone of the Discourse repository. That means that `git rev-parse --short` only outputs 8 characters. On the `main` branch (with almost 50k commits), we currently have 6 7-character collisions, and no 8-character collisions. However, when looking beyond the `main` branch, 8-character collisions [have been observed](https://meta.discourse.org/t/193320/3).

This commit updates docker_manager to use the full commit hash internally, and for GitHub comparison links. In the UI, hashes are truncated to 8 characters, and the full hash is displayed on mouseover.
This commit is contained in:
David Taylor 2022-01-22 18:27:25 +00:00 committed by GitHub
parent 6ecdddd687
commit 11d61cb82e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 9 deletions

View File

@ -102,7 +102,9 @@ return n.default.ajax(t.default.getAppURL("/admin/docker/ps"),{dataType:"text"})
var a=r
e.default=a})),define("manager-client/models/repo",["exports","manager-client/discourse","jquery"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
var r=[]
function a(e){return e.map((function(e){return e.get("version")})).join(", ")}var o=Ember.Object.extend({unloaded:!0,checking:!1,checkingStatus:Ember.computed.or("unloaded","checking"),upToDate:Ember.computed("upgrading","version","latest.version",(function(){return!this.get("upgrading")&this.get("version")===this.get("latest.version")})),prettyVersion:Ember.computed("version","pretty_version",(function(){return this.get("pretty_version")||this.get("version")})),prettyLatestVersion:Ember.computed("latest.{version,pretty_version}",(function(){return this.get("latest.pretty_version")||this.get("latest.version")})),get shouldCheck(){if(Ember.isNone(this.get("version")))return!1
function a(e){return e.map((function(e){return e.get("version")})).join(", ")}var o=Ember.Object.extend({unloaded:!0,checking:!1,checkingStatus:Ember.computed.or("unloaded","checking"),upToDate:Ember.computed("upgrading","version","latest.version",(function(){return!this.get("upgrading")&this.get("version")===this.get("latest.version")})),prettyVersion:Ember.computed("version","pretty_version",(function(){var e
return this.get("pretty_version")||(null===(e=this.get("version"))||void 0===e?void 0:e.substring(0,8))})),prettyLatestVersion:Ember.computed("latest.{version,pretty_version}",(function(){var e
return this.get("latest.pretty_version")||(null===(e=this.get("latest.version"))||void 0===e?void 0:e.substring(0,8))})),get shouldCheck(){if(Ember.isNone(this.get("version")))return!1
if(this.get("checking"))return!1
var e=this.get("lastCheckedAt")
return!e||(new Date).getTime()-e>6e4},repoAjax:function(e,r){return(r=r||{}).data=this.getProperties("path","version","branch"),n.default.ajax(t.default.getAppURL(e),r)},findLatest:function(){var e=this
@ -149,7 +151,7 @@ e.default=t})),define("manager-client/templates/components/progress-bar",["expor
var t=Ember.HTMLBars.template({id:"a165sycW",block:'{"symbols":[],"statements":[[10,"div"],[15,0,[31,["progress-bar progress-bar-striped ",[30,[36,1],[[35,0],"progress-bar-animated"],null]]]],[15,5,[34,2]],[12],[13],[2,"\\n"]],"hasEval":false,"upvars":["active","if","barStyle"]}',meta:{moduleName:"manager-client/templates/components/progress-bar.hbs"}})
e.default=t}))
define("manager-client/templates/components/repo-status",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
var t=Ember.HTMLBars.template({id:"i42wYwsY",block:'{"symbols":[],"statements":[[10,"td"],[12],[2,"\\n"],[6,[37,4],[[35,6]],null,[["default"],[{"statements":[[2," "],[10,"img"],[14,0,"check-circle"],[15,"src",[34,6]],[15,"alt",[34,7]],[15,"title",[34,7]],[12],[13],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n"],[10,"td"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[34,2,["url"]]]]],[12],[1,[35,2,["name"]]],[13],[2,"\\n "],[10,"span"],[14,0,"current commit-hash"],[12],[1,[35,2,["prettyVersion"]]],[13],[2,"\\n"],[13],[2,"\\n"],[10,"td"],[12],[2,"\\n"],[6,[37,4],[[35,2,["checkingStatus"]]],null,[["default","else"],[{"statements":[[2," Checking for new version...\\n"]],"parameters":[]},{"statements":[[6,[37,4],[[35,2,["upToDate"]]],null,[["default","else"],[{"statements":[[2," Up to date\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"new-version"],[12],[2,"\\n "],[10,"h4"],[12],[2,"New Version Available!"],[13],[2,"\\n "],[10,"ul"],[12],[2,"\\n "],[10,"li"],[12],[2,"Remote Version: "],[10,"span"],[14,0,"new commit-hash"],[12],[1,[35,2,["prettyLatestVersion"]]],[13],[13],[2,"\\n "],[10,"li"],[12],[2,"Last Updated:\\n"],[6,[37,4],[[35,2,["latest","date"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,3],[[35,2,["latest","date"]]],[["interval"],[1000]]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," —\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"li"],[14,0,"new-commits"],[12],[1,[30,[36,5],[[35,2,["latest","commits_behind"]],[35,2,["version"]],[35,2,["latest","version"]],[35,2,["url"]]],null]],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[35,2,["upgrading"]]],null,[["default","else"],[{"statements":[[2," "],[11,"button"],[24,0,"btn"],[4,[38,1],[[32,0],"upgrade"],null],[12],[2,"Currently Upgrading..."],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"button"],[24,0,"upgrade-button btn"],[16,"disabled",[34,0]],[4,[38,1],[[32,0],"upgrade"],null],[12],[2,"Upgrade"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["upgradeDisabled","action","repo","moment-from-now","if","new-commits","officialRepoImageSrc","officialRepoImageTitle"]}',meta:{moduleName:"manager-client/templates/components/repo-status.hbs"}})
var t=Ember.HTMLBars.template({id:"4IqtgNP6",block:'{"symbols":[],"statements":[[10,"td"],[12],[2,"\\n"],[6,[37,4],[[35,6]],null,[["default"],[{"statements":[[2," "],[10,"img"],[14,0,"check-circle"],[15,"src",[34,6]],[15,"alt",[34,7]],[15,"title",[34,7]],[12],[13],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n"],[10,"td"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[34,2,["url"]]]]],[12],[1,[35,2,["name"]]],[13],[2,"\\n "],[10,"span"],[14,0,"current commit-hash"],[15,"title",[34,2,["version"]]],[12],[1,[35,2,["prettyVersion"]]],[13],[2,"\\n"],[13],[2,"\\n"],[10,"td"],[12],[2,"\\n"],[6,[37,4],[[35,2,["checkingStatus"]]],null,[["default","else"],[{"statements":[[2," Checking for new version...\\n"]],"parameters":[]},{"statements":[[6,[37,4],[[35,2,["upToDate"]]],null,[["default","else"],[{"statements":[[2," Up to date\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"new-version"],[12],[2,"\\n "],[10,"h4"],[12],[2,"New Version Available!"],[13],[2,"\\n "],[10,"ul"],[12],[2,"\\n "],[10,"li"],[12],[2,"Remote Version: "],[10,"span"],[14,0,"new commit-hash"],[15,"title",[34,2,["latestVersion"]]],[12],[1,[35,2,["prettyLatestVersion"]]],[13],[13],[2,"\\n "],[10,"li"],[12],[2,"Last Updated:\\n"],[6,[37,4],[[35,2,["latest","date"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,3],[[35,2,["latest","date"]]],[["interval"],[1000]]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," —\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"li"],[14,0,"new-commits"],[12],[1,[30,[36,5],[[35,2,["latest","commits_behind"]],[35,2,["version"]],[35,2,["latest","version"]],[35,2,["url"]]],null]],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[35,2,["upgrading"]]],null,[["default","else"],[{"statements":[[2," "],[11,"button"],[24,0,"btn"],[4,[38,1],[[32,0],"upgrade"],null],[12],[2,"Currently Upgrading..."],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"button"],[24,0,"upgrade-button btn"],[16,"disabled",[34,0]],[4,[38,1],[[32,0],"upgrade"],null],[12],[2,"Upgrade"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["upgradeDisabled","action","repo","moment-from-now","if","new-commits","officialRepoImageSrc","officialRepoImageTitle"]}',meta:{moduleName:"manager-client/templates/components/repo-status.hbs"}})
e.default=t})),define("manager-client/templates/components/x-console",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
var t=Ember.HTMLBars.template({id:"ZW89qKKO",block:'{"symbols":[],"statements":[[1,[34,0]],[2,"\\n"]],"hasEval":false,"upvars":["output"]}',meta:{moduleName:"manager-client/templates/components/x-console.hbs"}})
e.default=t})),define("manager-client/templates/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
@ -161,4 +163,4 @@ var t=Ember.HTMLBars.template({id:"VQmN43M/",block:'{"symbols":[],"statements":[
e.default=t})),define("manager-client/templates/upgrade",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
var t=Ember.HTMLBars.template({id:"IO8vYqzv",block:'{"symbols":[],"statements":[[10,"h3"],[12],[2,"Upgrade "],[1,[34,4]],[13],[2,"\\n\\n"],[1,[30,[36,8],null,[["percent"],[[35,7]]]]],[2,"\\n\\n"],[6,[37,3],[[35,9]],null,[["default"],[{"statements":[[2," "],[10,"p"],[12],[2,"Upgrade completed successfully!"],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,3],[[35,10]],null,[["default"],[{"statements":[[2," "],[10,"p"],[12],[2,"Sorry, there was an error upgrading Discourse. Please check the logs below."],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,3],[[35,11]],null,[["default","else"],[{"statements":[[6,[37,6],[[35,5]],null,[["default","else"],[{"statements":[[2," "],[10,"p"],[12],[1,[34,4]],[2," is at the newest version."],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"p"],[12],[2,"Everything is up-to-date."],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,5,"clear: both"],[12],[2,"\\n "],[11,"button"],[16,"disabled",[34,1]],[24,0,"btn"],[4,[38,0],[[32,0],"start"],null],[12],[1,[34,2]],[13],[2,"\\n"],[6,[37,3],[[35,1]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"btn unlock"],[4,[38,0],[[32,0],"resetUpgrade"],null],[12],[2,"Reset Upgrade"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[1,[30,[36,13],null,[["output","followOutput"],[[35,12],true]]]],[2,"\\n"]],"hasEval":false,"upvars":["action","upgrading","upgradeButtonText","if","title","multiUpgrade","unless","percent","progress-bar","complete","failed","isUpToDate","output","x-console"]}',meta:{moduleName:"manager-client/templates/upgrade.hbs"}})
e.default=t})),define("manager-client/transforms/boolean",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.BooleanTransform}})})),define("manager-client/transforms/date",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.DateTransform}})})),define("manager-client/transforms/number",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.NumberTransform}})})),define("manager-client/transforms/string",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.StringTransform}})})),define("manager-client/config/environment",[],(function(){try{var e="manager-client/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),n={default:JSON.parse(decodeURIComponent(t))}
return Object.defineProperty(n,"__esModule",{value:!0}),n}catch(r){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("manager-client/app").default.create({name:"manager-client",version:"0.0.0+f6307675"})
return Object.defineProperty(n,"__esModule",{value:!0}),n}catch(r){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("manager-client/app").default.create({name:"manager-client",version:"0.0.0+815ed175"})

View File

@ -32,11 +32,11 @@ class DockerManager::GitRepo
end
def latest_local_commit
run "rev-parse --short HEAD"
run "rev-parse HEAD"
end
def latest_origin_commit
run "rev-parse --short #{tracking_branch}"
run "rev-parse #{tracking_branch}"
end
def latest_local_tag_version

View File

@ -24,11 +24,14 @@ const Repo = EmberObject.extend({
}),
prettyVersion: computed("version", "pretty_version", function () {
return this.get("pretty_version") || this.get("version");
return this.get("pretty_version") || this.get("version")?.substring(0, 8);
}),
prettyLatestVersion: computed("latest.{version,pretty_version}", function () {
return this.get("latest.pretty_version") || this.get("latest.version");
return (
this.get("latest.pretty_version") ||
this.get("latest.version")?.substring(0, 8)
);
}),
get shouldCheck() {

View File

@ -5,7 +5,7 @@
</td>
<td>
<a href="{{repo.url}}">{{repo.name}}</a>
<span class="current commit-hash">{{repo.prettyVersion}}</span>
<span class="current commit-hash" title={{repo.version}}>{{repo.prettyVersion}}</span>
</td>
<td>
{{#if repo.checkingStatus}}
@ -16,7 +16,7 @@
<div class='new-version'>
<h4>New Version Available!</h4>
<ul>
<li>Remote Version: <span class="new commit-hash">{{repo.prettyLatestVersion}}</span></li>
<li>Remote Version: <span class="new commit-hash" title={{repo.latestVersion}}>{{repo.prettyLatestVersion}}</span></li>
<li>Last Updated:
{{#if repo.latest.date}}
{{moment-from-now repo.latest.date interval=1000}}