Improving diff hunk headers

Hi all, I was looking over patches today and wished that there was better context for the changed lines. Specifically, I wanted a function name instead of just the class name. I finally came across this e-mail [1] from someone at Red Hat: """ Hello, I'm sure you're aware of hunk header lines in patches: @@ -24,5 +24,5 @@ class SomeClass(object): It's possible to configure which source line Git selects for the hunk header. By default it uses non-indented lines. A "python" regexp, which selects functions, classes and methods, is already included in Git; you just have to enable it. I also use custom regexps for ldifs and API.txt: $ cat ~/.gitattributes # (Or .git/info/attributes for project-specific config) *.py diff=python API.txt diff=apitxt *.ldif diff=ldif *.update diff=ldif $ git config -l # set with e.g. `git config --global key="value"` ... core.attributesfile=~/.gitattributes diff.apitxt.xfuncname=^command: .* diff.ldif.xfuncname=^dn:.* Enjoy your Friday! -- Petr³ """ We can also define our own, as per: http://stackoverflow.com/questions/2783086/how-does-git-diff-generate-hunk-d... I put *.py diff=python into my kimchi project's .git/info/attributes file, and I like these diffs a lot better. For example (using a really old branch I should have deleted while ago! ): @@ -37,7 +37,6 @@ class AsyncTask(object): self.status = 'running' self.message = 'OK' self._save_helper() - self._cp_request = cherrypy.serving.request self.thread = threading.Thread(target=self._run_helper, args=(opaque, self._status_cb)) self.thread.setDaemon(True) @@ -37,7 +37,6 @@ class AsyncTask(object): self.status = 'running' self.message = 'OK' self._save_helper() - self._cp_request = cherrypy.serving.request self.thread = threading.Thread(target=self._run_helper, args=(opaque, self._status_cb)) self.thread.setDaemon(True) @@ -60,17 +59,13 @@ class AsyncTask(object): obj = {} for attr in ('id', 'target_uri', 'message', 'status'): obj[attr] = getattr(self, attr) - try: - with self.objstore as session: - session.store('task', self.id, obj) - except Exception as e: - raise OperationFailed('KCHASYNC0002E', {'err': e.message}) + with self.objstore as session: + session.store('task', self.id, obj) def _run_helper(self, opaque, cb): - cherrypy.serving.request = self._cp_request try: changes to: diff --git a/src/kimchi/asynctask.py b/src/kimchi/asynctask.py index e2d2dcf..8f0d96c 100644 --- a/src/kimchi/asynctask.py +++ b/src/kimchi/asynctask.py @@ -37,7 +37,6 @@ def __init__(self, id, target_uri, fn, objstore, opaque=None): self.status = 'running' self.message = 'OK' self._save_helper() - self._cp_request = cherrypy.serving.request self.thread = threading.Thread(target=self._run_helper, args=(opaque, self._status_cb)) self.thread.setDaemon(True) @@ -60,17 +59,13 @@ def _save_helper(self): obj = {} for attr in ('id', 'target_uri', 'message', 'status'): obj[attr] = getattr(self, attr) - try: - with self.objstore as session: - session.store('task', self.id, obj) - except Exception as e: - raise OperationFailed('KCHASYNC0002E', {'err': e.message}) + with self.objstore as session: So now you can see the function that the code is in, not the larger-scope (the class). I thought I would share, in case any one else wanted to use this. Maybe we could even add a .gitattributes file to kimchi if others think it's a good idea to enforce some project-specific conventions. Happy coding! - Christy [1] http://www.redhat.com/archives/freeipa-devel/2013-April/msg00381.html

On 05/21/2014 12:25 AM, Christy Perez wrote:
Hi all,
I was looking over patches today and wished that there was better context for the changed lines. Specifically, I wanted a function name instead of just the class name.
I finally came across this e-mail [1] from someone at Red Hat:
""" Hello,
I'm sure you're aware of hunk header lines in patches: @@ -24,5 +24,5 @@ class SomeClass(object):
It's possible to configure which source line Git selects for the hunk header. By default it uses non-indented lines. A "python" regexp, which selects functions, classes and methods, is already included in Git; you just have to enable it. I also use custom regexps for ldifs and API.txt:
$ cat ~/.gitattributes # (Or .git/info/attributes for project-specific config)
*.py diff=python API.txt diff=apitxt *.ldif diff=ldif *.update diff=ldif
$ git config -l # set with e.g. `git config --global key="value"` ... core.attributesfile=~/.gitattributes diff.apitxt.xfuncname=^command: .* diff.ldif.xfuncname=^dn:.*
Enjoy your Friday!
-- Petr³ """
We can also define our own, as per: http://stackoverflow.com/questions/2783086/how-does-git-diff-generate-hunk-d...
I put *.py diff=python into my kimchi project's .git/info/attributes file, and I like these diffs a lot better.
For example (using a really old branch I should have deleted while ago! ):
@@ -37,7 +37,6 @@ class AsyncTask(object): self.status = 'running' self.message = 'OK' self._save_helper() - self._cp_request = cherrypy.serving.request self.thread = threading.Thread(target=self._run_helper, args=(opaque, self._status_cb)) self.thread.setDaemon(True) @@ -37,7 +37,6 @@ class AsyncTask(object): self.status = 'running' self.message = 'OK' self._save_helper() - self._cp_request = cherrypy.serving.request self.thread = threading.Thread(target=self._run_helper, args=(opaque, self._status_cb)) self.thread.setDaemon(True) @@ -60,17 +59,13 @@ class AsyncTask(object): obj = {} for attr in ('id', 'target_uri', 'message', 'status'): obj[attr] = getattr(self, attr) - try: - with self.objstore as session: - session.store('task', self.id, obj) - except Exception as e: - raise OperationFailed('KCHASYNC0002E', {'err': e.message}) + with self.objstore as session: + session.store('task', self.id, obj)
def _run_helper(self, opaque, cb): - cherrypy.serving.request = self._cp_request try:
changes to:
diff --git a/src/kimchi/asynctask.py b/src/kimchi/asynctask.py index e2d2dcf..8f0d96c 100644 --- a/src/kimchi/asynctask.py +++ b/src/kimchi/asynctask.py @@ -37,7 +37,6 @@ def __init__(self, id, target_uri, fn, objstore, opaque=None): self.status = 'running' self.message = 'OK' self._save_helper() - self._cp_request = cherrypy.serving.request self.thread = threading.Thread(target=self._run_helper, args=(opaque, self._status_cb)) self.thread.setDaemon(True) @@ -60,17 +59,13 @@ def _save_helper(self): seems it is good to show the function _save_helper(self) instead of class AsyncTask(object) obj = {} for attr in ('id', 'target_uri', 'message', 'status'): obj[attr] = getattr(self, attr) - try: - with self.objstore as session: - session.store('task', self.id, obj) - except Exception as e: - raise OperationFailed('KCHASYNC0002E', {'err': e.message}) + with self.objstore as session:
So now you can see the function that the code is in, not the larger-scope (the class).
I thought I would share, in case any one else wanted to use this.
Maybe we could even add a .gitattributes file to kimchi if others think it's a good idea to enforce some project-specific conventions.
Happy coding!
- Christy
[1] http://www.redhat.com/archives/freeipa-devel/2013-April/msg00381.html
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
-- Thanks and best regards! Sheldon Feng(冯少合)<shaohef@linux.vnet.ibm.com> IBM Linux Technology Center

On 05/21/2014 12:25 AM, Christy Perez wrote:
I thought I would share, in case any one else wanted to use this.
Maybe we could even add a .gitattributes file to kimchi if others think it's a good idea to enforce some project-specific conventions. +1. also we can add more configure in .gitattributes not sure diff.rename or others can be added to .gitattributes.
Happy coding!
- Christy
[1] http://www.redhat.com/archives/freeipa-devel/2013-April/msg00381.html
-- Thanks and best regards! Sheldon Feng(冯少合)<shaohef@linux.vnet.ibm.com> IBM Linux Technology Center
participants (2)
-
Christy Perez
-
Sheldon