Skip to content

Commit

Permalink
better auto commit messages
Browse files Browse the repository at this point in the history
  • Loading branch information
andy-wm-arthur committed Jun 22, 2021
1 parent cff1057 commit ddfda04
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 29 deletions.
48 changes: 24 additions & 24 deletions dolt/context_managers.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
from datetime import datetime, timedelta
from contextlib import contextmanager
import pytz

from django.db import connection, transaction
from django.db.models.signals import m2m_changed, pre_delete, post_save

from nautobot.extras.models.change_logging import ObjectChange

from dolt.models import Commit, Branch


Expand All @@ -14,57 +18,53 @@ class AutoDoltCommit(object):
def __init__(self, request):
self.request = request
self.commit = False
# self.id = uuid.uuid4()
self.changes = []

def __enter__(self):
# Connect our receivers to the post_save and post_delete signals.
post_save.connect(
self._handle_changed_object, dispatch_uid="auto_dolt_commit_changed_object"
)
m2m_changed.connect(
self._handle_changed_object, dispatch_uid="auto_dolt_commit_changed_object"
)
pre_delete.connect(
self._handle_deleted_object, dispatch_uid="auto_dolt_commit_deleted_object"
)
post_save.connect(self._handle_update, dispatch_uid="dolt_commit_update")
m2m_changed.connect(self._handle_update, dispatch_uid="dolt_commit_update")
pre_delete.connect(self._handle_delete, dispatch_uid="dolt_commit_delete")

def __exit__(self, type, value, traceback):
if self.commit:
self._commit()

# Disconnect change logging signals. This is necessary to avoid recording any errant
# changes during test cleanup.
post_save.disconnect(
self._handle_changed_object, dispatch_uid="auto_dolt_commit_changed_object"
)
m2m_changed.disconnect(
self._handle_changed_object, dispatch_uid="auto_dolt_commit_changed_object"
)
pre_delete.disconnect(
self._handle_deleted_object, dispatch_uid="auto_dolt_commit_deleted_object"
)
post_save.disconnect(self._handle_update, dispatch_uid="dolt_commit_update")
m2m_changed.disconnect(self._handle_update, dispatch_uid="dolt_commit_update")
pre_delete.disconnect(self._handle_delete, dispatch_uid="dolt_commit_delete")

def _handle_changed_object(self, sender, instance, **kwargs):
def _handle_update(self, sender, instance, **kwargs):
"""
Fires when an object is created or updated.
"""
# Queue the object for processing once the request completes
# todo: cleanup conditions
if type(instance) == ObjectChange:
self.changes.append(instance)
if "created" in kwargs:
self.commit = True
elif kwargs.get("action") in ["post_add", "post_remove"] and kwargs["pk_set"]:
# m2m_changed with objects added or removed
self.commit = True

def _handle_deleted_object(self, sender, instance, **kwargs):
def _handle_delete(self, sender, instance, **kwargs):
"""
Fires when an object is deleted.
"""
self.commit = True

def _commit(self):
# todo: use ObjectChange to create commit message
Commit(message="auto dolt commit").save(author=self._get_commit_author())
Commit(message=self._get_commit_message()).save(
author=self._get_commit_author()
)

def _get_commit_message(self):
if not self.changes:
return "auto dolt commit"
self.changes = sorted(self.changes, key=lambda obj: obj.time)
return "; ".join([str(c) for c in self.changes])

def _get_commit_author(self):
usr = self.request.user
Expand Down
4 changes: 4 additions & 0 deletions dolt/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,10 @@ def __str__(self):
def get_absolute_url(self):
return reverse("plugins:dolt:commit", args=[self.commit_hash])

@property
def short_message(self):
return self.message.split(";")[0]

@property
def present_in_database(self):
# determines `editing` flag in forms
Expand Down
5 changes: 2 additions & 3 deletions dolt/tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ class Meta(BaseTable.Meta):
"actions",
)
default_columns = (
"active" "pk",
"name",
"latest_committer",
"latest_committer_email",
Expand All @@ -71,12 +70,12 @@ class Meta(BaseTable.Meta):


class CommitTable(BaseTable):
message = tables.LinkColumn()
short_message = tables.LinkColumn()

class Meta(BaseTable.Meta):
model = Commit
fields = (
"message",
"short_message",
"date",
"committer",
"email",
Expand Down
4 changes: 2 additions & 2 deletions dolt/templates/dolt/commit.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<ol class="breadcrumb">
<li>Dolt</li>
<li><a href="{% url 'plugins:dolt:commit_list' %}">Commits</a></li>
<li>{{ object.message }}</li>
<li>{{ object.short_message }}</li>
</ol>
</div>
<div class="col-sm-4 col-md-3">
Expand All @@ -31,7 +31,7 @@
<div class="pull-right noprint">
{% plugin_buttons object %}
</div>
<h1>{% block title %}{{ object.message }}{% endblock %}</h1>
<h1>{% block title %}{{ object.short_message }}{% endblock %}</h1>
{% include 'inc/created_updated.html' %}
<div class="pull-right noprint">
{% custom_links object %}
Expand Down

0 comments on commit ddfda04

Please sign in to comment.