]> git.madduck.net Git - etc/taskwarrior.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Use uuid fields intead of ids where possible
authorTomas Babej <tomasbabej@gmail.com>
Fri, 19 Dec 2014 01:46:05 +0000 (02:46 +0100)
committerTomas Babej <tomasbabej@gmail.com>
Thu, 25 Dec 2014 22:51:11 +0000 (23:51 +0100)
IDs can get non-unique with completed tasks, which makes modifications
or deletions of particular completed tasks impossible.

tasklib/task.py

index c72a9b307ec9769d73081d92b4ae221c07a5a881..f2b020db36f9184f0e4665ed2a9d471342355490 100644 (file)
@@ -71,7 +71,7 @@ class TaskAnnotation(TaskResource):
 
 
 class Task(TaskResource):
 
 
 class Task(TaskResource):
-    read_only_fields = ['id', 'entry', 'urgency']
+    read_only_fields = ['id', 'entry', 'urgency', 'uuid']
 
     class DoesNotExist(Exception):
         pass
 
     class DoesNotExist(Exception):
         pass
@@ -138,7 +138,7 @@ class Task(TaskResource):
         if self.deleted:
             raise self.DeletedTask("Task was already deleted")
 
         if self.deleted:
             raise self.DeletedTask("Task was already deleted")
 
-        self.warrior.execute_command([self['id'], 'delete'], config_override={
+        self.warrior.execute_command([self['uuid'], 'delete'], config_override={
             'confirmation': 'no',
         })
 
             'confirmation': 'no',
         })
 
@@ -155,26 +155,26 @@ class Task(TaskResource):
         elif self.deleted:
             raise self.DeletedTask("Deleted task cannot be completed")
 
         elif self.deleted:
             raise self.DeletedTask("Deleted task cannot be completed")
 
-        self.warrior.execute_command([self['id'], 'done'])
+        self.warrior.execute_command([self['uuid'], 'done'])
 
         # Refresh the status again, so that we have updated info stored
         self.refresh(only_fields=['status'])
 
     def save(self):
 
         # Refresh the status again, so that we have updated info stored
         self.refresh(only_fields=['status'])
 
     def save(self):
-        args = [self['id'], 'modify'] if self['id'] else ['add']
+        args = [self['uuid'], 'modify'] if self['uuid'] else ['add']
         args.extend(self._get_modified_fields_as_args())
         self.warrior.execute_command(args)
         self._modified_fields.clear()
 
     def add_annotation(self, annotation):
         args.extend(self._get_modified_fields_as_args())
         self.warrior.execute_command(args)
         self._modified_fields.clear()
 
     def add_annotation(self, annotation):
-        args = [self['id'], 'annotate', annotation]
+        args = [self['uuid'], 'annotate', annotation]
         self.warrior.execute_command(args)
         self.refresh(only_fields=['annotations'])
 
     def remove_annotation(self, annotation):
         if isinstance(annotation, TaskAnnotation):
             annotation = annotation['description']
         self.warrior.execute_command(args)
         self.refresh(only_fields=['annotations'])
 
     def remove_annotation(self, annotation):
         if isinstance(annotation, TaskAnnotation):
             annotation = annotation['description']
-        args = [self['id'], 'denotate', annotation]
+        args = [self['uuid'], 'denotate', annotation]
         self.warrior.execute_command(args)
         self.refresh(only_fields=['annotations'])
 
         self.warrior.execute_command(args)
         self.refresh(only_fields=['annotations'])