Added git diff functionality (Issue #16)

This commit is contained in:
Daniel Perna 2018-07-11 23:51:22 +02:00
parent b04eb10682
commit a8fbb22fea
3 changed files with 92 additions and 0 deletions

View file

@ -6,6 +6,7 @@ Version 0.3.0 (2018-)
- CREDENTIALS setting replaced by USERNAME and PASSWORD @danielperna84
- PASSWORD can optionally be provided as SHA256 hash (Issue #100) @danielperna84
- Added SESAME_TOTP_SECRET for TOTP based IP whitelisting (Issue #100) @danielperna84
- Added git diff functionality (Issue #16) @danielperna84
Version 0.2.9 (2018-06-22)
- Material Icons and HASS-help now open in new tab instead of modal (Issues #85 and #34) @danielperna84

View file

@ -2562,6 +2562,14 @@ INDEX = Template(r"""<!DOCTYPE html>
dd_gitadd_a.innerHTML = "git add";
dd_gitadd.appendChild(dd_gitadd_a);
dropdown.appendChild(dd_gitadd);
// git diff button
var dd_gitdiff = document.createElement('li');
var dd_gitdiff_a = document.createElement('a');
dd_gitdiff_a.classList.add('waves-effect', 'fb_dd', 'modal-trigger');
dd_gitdiff_a.setAttribute('onclick', "gitdiff()");
dd_gitdiff_a.innerHTML = "git diff";
dd_gitdiff.appendChild(dd_gitdiff_a);
dropdown.appendChild(dd_gitdiff);
}
}
@ -3051,6 +3059,26 @@ INDEX = Template(r"""<!DOCTYPE html>
}
}
function gitdiff() {
var path = document.getElementById('fb_currentfile').value;
closefile();
if (path.length > 0) {
data = new Object();
data.path = path;
$.post("api/gitdiff", data).done(function(resp) {
if (resp.error) {
var $toastContent = $("<div><pre>" + resp.message + "\n" + resp.path + "</pre></div>");
Materialize.toast($toastContent, 5000);
}
else {
editor.setOption('mode', modemapping['diff']);
editor.getSession().setValue(resp.message, -1);
editor.session.getUndoManager().markClean();
}
});
}
}
function gitinit() {
var path = document.getElementById("fbheader").innerHTML;
if (path.length > 0) {
@ -4144,6 +4172,41 @@ class RequestHandler(BaseHTTPRequestHandler):
LOG.warning(err)
else:
response['message'] = "Missing filename"
elif req.path.endswith('/api/gitdiff'):
try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'),
keep_blank_values=1)
except Exception as err:
LOG.warning(err)
response['message'] = "%s" % (str(err))
postvars = {}
if 'path' in postvars.keys():
if postvars['path']:
try:
diffpath = unquote(postvars['path'][0])
repo = REPO(diffpath,
search_parent_directories=True)
filepath = "/".join(diffpath.split(os.sep)[len(repo.working_dir.split(os.sep)):])
response['path'] = filepath
try:
diff = repo.index.diff(None, create_patch=True, paths=filepath)[0].diff.decode("utf-8")
response['error'] = False
response['message'] = diff
self.send_response(200)
self.send_header('Content-type', 'text/json')
self.end_headers()
self.wfile.write(bytes(json.dumps(response), "utf8"))
return
except Exception as err:
LOG.warning(err)
response['error'] = True
response['message'] = str(err)
except Exception as err:
response['message'] = "%s" % (str(err))
LOG.warning(err)
else:
response['message'] = "Missing filename"
elif req.path.endswith('/api/commit'):
try:
postvars = parse_qs(self.rfile.read(length).decode('utf-8'),

View file

@ -2456,6 +2456,14 @@
dd_gitadd_a.innerHTML = "git add";
dd_gitadd.appendChild(dd_gitadd_a);
dropdown.appendChild(dd_gitadd);
// git diff button
var dd_gitdiff = document.createElement('li');
var dd_gitdiff_a = document.createElement('a');
dd_gitdiff_a.classList.add('waves-effect', 'fb_dd', 'modal-trigger');
dd_gitdiff_a.setAttribute('onclick', "gitdiff()");
dd_gitdiff_a.innerHTML = "git diff";
dd_gitdiff.appendChild(dd_gitdiff_a);
dropdown.appendChild(dd_gitdiff);
}
}
@ -2945,6 +2953,26 @@
}
}
function gitdiff() {
var path = document.getElementById('fb_currentfile').value;
closefile();
if (path.length > 0) {
data = new Object();
data.path = path;
$.post("api/gitdiff", data).done(function(resp) {
if (resp.error) {
var $toastContent = $("<div><pre>" + resp.message + "\n" + resp.path + "</pre></div>");
Materialize.toast($toastContent, 5000);
}
else {
editor.setOption('mode', modemapping['diff']);
editor.getSession().setValue(resp.message, -1);
editor.session.getUndoManager().markClean();
}
});
}
}
function gitinit() {
var path = document.getElementById("fbheader").innerHTML;
if (path.length > 0) {