Merge remote-tracking branch 'origin/entomologist-data' into entomologist-data
This commit is contained in:
commit
baa7cdd7e9
25 changed files with 141 additions and 3 deletions
1
093e87e8049b93bfa2d8fcd544cae75f/assignee
Normal file
1
093e87e8049b93bfa2d8fcd544cae75f/assignee
Normal file
|
|
@ -0,0 +1 @@
|
|||
seb
|
||||
|
|
@ -3,4 +3,5 @@ add optional 'assignee' to issue
|
|||
This is probably just another free-form text string for now, maybe
|
||||
something fancier in the future.
|
||||
|
||||
As part of this, teach `ent list FILTER` to filter by assignee.
|
||||
NOTE: Teaching `ent list FILTER` to filter by assignee is a separate
|
||||
issue.
|
||||
|
|
|
|||
1
75cefad80aacbf23fc7b9c24a75aa236/assignee
Normal file
1
75cefad80aacbf23fc7b9c24a75aa236/assignee
Normal file
|
|
@ -0,0 +1 @@
|
|||
seb
|
||||
|
|
@ -1 +1 @@
|
|||
inprogress
|
||||
done
|
||||
1
793bda8b9726b0336d97e856895907f8/assignee
Normal file
1
793bda8b9726b0336d97e856895907f8/assignee
Normal file
|
|
@ -0,0 +1 @@
|
|||
seb
|
||||
1
793bda8b9726b0336d97e856895907f8/state
Normal file
1
793bda8b9726b0336d97e856895907f8/state
Normal file
|
|
@ -0,0 +1 @@
|
|||
done
|
||||
13
7d2d236668872cf11f167ac0462f8751/description
Normal file
13
7d2d236668872cf11f167ac0462f8751/description
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
add `ent tag ISSUE_ID TAG`
|
||||
|
||||
Tags are short text strings without white space.
|
||||
|
||||
The Issue directory will gain a file named `tags`, containing the sorted
|
||||
list of tags.
|
||||
|
||||
The `ent list` output will add a bit to the end of each issue displayed,
|
||||
something like "[tag1, tag2]", or nothing if the issue has no tags
|
||||
(like how we don't show assignee if there is none).
|
||||
|
||||
As part of this issue, the `ent list FILTER` will gain a new filter
|
||||
chunk type like "tags=v2.31,ux-papercut".
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
I think this will be easy. We'll teach `ent edit ID` to search not only
|
||||
issue IDs but also comment IDs, then reuse the existing edit code.
|
||||
|
|
@ -0,0 +1 @@
|
|||
This is a duplicate of issue e089400e8a9e11fe9bf10d50b2f889d7
|
||||
1
9e69a30ad6965d7488514584c97ac63c/assignee
Normal file
1
9e69a30ad6965d7488514584c97ac63c/assignee
Normal file
|
|
@ -0,0 +1 @@
|
|||
seb
|
||||
1
9e69a30ad6965d7488514584c97ac63c/description
Normal file
1
9e69a30ad6965d7488514584c97ac63c/description
Normal file
|
|
@ -0,0 +1 @@
|
|||
teach `ent list FILTER` to filter by assignee
|
||||
1
9e69a30ad6965d7488514584c97ac63c/state
Normal file
1
9e69a30ad6965d7488514584c97ac63c/state
Normal file
|
|
@ -0,0 +1 @@
|
|||
done
|
||||
1
a26da230276d317e85f9fcca41c19d2e/assignee
Normal file
1
a26da230276d317e85f9fcca41c19d2e/assignee
Normal file
|
|
@ -0,0 +1 @@
|
|||
seb
|
||||
1
a26da230276d317e85f9fcca41c19d2e/state
Normal file
1
a26da230276d317e85f9fcca41c19d2e/state
Normal file
|
|
@ -0,0 +1 @@
|
|||
inprogress
|
||||
7
a5ac277614ea4d13f78031abb25ea7d6/description
Normal file
7
a5ac277614ea4d13f78031abb25ea7d6/description
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
`ent new` and `ent comment`: detect empty issue descriptions & comments
|
||||
|
||||
If the user changes their mind and saves an empty file, don't make a
|
||||
new empty comment.
|
||||
|
||||
For an embarrassing example, see comment 9e81dce91164a3ee26c3214ee2d9d809
|
||||
on issue 75cefad80aacbf23fc7b9c24a75aa236.
|
||||
7
ae56208b6db64ccd9da31ce2bb1aad64/description
Normal file
7
ae56208b6db64ccd9da31ce2bb1aad64/description
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
`ent sync`, ^C, now there's a stray worktree
|
||||
|
||||
The worktree has the `entomologist-data` branch checked out in it,
|
||||
so ent won't make another.
|
||||
|
||||
Probably want a crash handler in `ent` to clean up any worktree we
|
||||
have open.
|
||||
1
af53c561b36e9b2709b939f81daee534/assignee
Normal file
1
af53c561b36e9b2709b939f81daee534/assignee
Normal file
|
|
@ -0,0 +1 @@
|
|||
seb
|
||||
1
af53c561b36e9b2709b939f81daee534/description
Normal file
1
af53c561b36e9b2709b939f81daee534/description
Normal file
|
|
@ -0,0 +1 @@
|
|||
use git author info to attribute issues and comments to people
|
||||
1
af53c561b36e9b2709b939f81daee534/state
Normal file
1
af53c561b36e9b2709b939f81daee534/state
Normal file
|
|
@ -0,0 +1 @@
|
|||
done
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# `ent list FILTER` filter format
|
||||
|
||||
I'm not sure about the filter format, but here are some notes...
|
||||
|
||||
There are (as of df7b5c6aa4a00dfca66dc802f1e813f23f27a5b9) two independent
|
||||
filters: "state" and "assignee". The "state" filter defaults to
|
||||
including issues whose state is InProgress, Blocked, Backlog, or New.
|
||||
The "assignee" filter defaults to including all issues, assigned or not.
|
||||
|
||||
The two filters can be independently overridden by the `ent list
|
||||
FILTER` command. FILTER is a string containing "chunks" separated by
|
||||
":", like the PATH environment variable. Each chunk is of the form
|
||||
"name=value[,value...]". "name" can currently be either "state" or
|
||||
"assignee", and we can add more in the future (e.g "tag" or "ctime").
|
||||
|
||||
The "value" arguments to the "state" filter must be one of the valid
|
||||
states, or it's a parse error.
|
||||
|
||||
The "value" arguments to the "assignee" filter are used to
|
||||
string-compare against the issues "assignee" field, exact matches are
|
||||
accepted and everything else is rejected. A special assignee filter of
|
||||
the empty string matches issues that don't have an assignee.
|
||||
|
||||
Some examples:
|
||||
|
||||
* `ent list` shows issues in the states listed above, and don't filter
|
||||
based on assignee at all.
|
||||
|
||||
* `ent list assignee=seb` shows issues in the states listed above,
|
||||
but only if the assignee is "seb".
|
||||
|
||||
* `ent list assignee=seb,` shows issues in the states listed above,
|
||||
but only if the assignee is "seb" or if there is no assignee.
|
||||
|
||||
* `ent list state=done` shows all issues in the Done state.
|
||||
|
||||
* `ent list state=inprogress:assignee=seb` shows issues in the InProgress
|
||||
state that are assigned to "seb".
|
||||
20
bed47b2be016cc41eb43ef6d0acf1f8f/description
Normal file
20
bed47b2be016cc41eb43ef6d0acf1f8f/description
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
make issue assignment more flexible
|
||||
|
||||
I think there are two things i want that don't currently work:
|
||||
* add some way to un-assign a person from an issue
|
||||
* support multiple people assigned to the same issue
|
||||
|
||||
Maybe the `assignee` field of the Issue struct should be a Vec<String>
|
||||
instead of String? And the `assignee` file of the issue directory should
|
||||
be a list, one assignee per line?
|
||||
|
||||
Possible new CLI ui:
|
||||
|
||||
* `ent assign ISSUE PERSON[,PERSON...]` replaces the `assignee` list
|
||||
with the new user-specified list.
|
||||
* `ent assign ISSUE +PERSON` adds PERSON to the list
|
||||
* `ent assign ISSUE -PERSON` removes the PERSON from the list
|
||||
|
||||
Also support removing the `assignee` file from the issue directory if the
|
||||
list is empty. Or maybe allow the file to exist but with 0 bytes in it?
|
||||
Probably either one is fine.
|
||||
1
da435e5e298b28dc223f9dcfe62a9140/assignee
Normal file
1
da435e5e298b28dc223f9dcfe62a9140/assignee
Normal file
|
|
@ -0,0 +1 @@
|
|||
lex
|
||||
|
|
@ -1 +1 @@
|
|||
inprogress
|
||||
done
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
One possible way to determine how much of the UUID we need to keep
|
||||
for uniqueness:
|
||||
|
||||
* Read the issue database into memory
|
||||
|
||||
* Build a tree of all the issue ids:
|
||||
|
||||
* Define a Node type for a tree datastructure as:
|
||||
enum Node {
|
||||
Empty,
|
||||
IssueId(String),
|
||||
SubNodes([&Node; 256]),
|
||||
}
|
||||
|
||||
* Create an empty root node = Node::Empty
|
||||
|
||||
* For each issue:
|
||||
issue_id_bytes = issue_id.iter()
|
||||
|
||||
issue_id_byte = issue_id_bytes.next()
|
||||
current_node = root
|
||||
|
||||
while current_node == SubNodes:
|
||||
current_node = current_node[issue_id_byte]
|
||||
issue_id_byte = issue_id_bytes.next()
|
||||
|
||||
if current_node == Empty:
|
||||
current_node = Node::IssueId(issue_id)
|
||||
else: # we know current_node == IssueId(original_issue_id)
|
||||
replace current_node with a SubNodes initialized to [Node::Empty; 256]
|
||||
current_node[original_issue_id[depth]] = Node::IssueId(original_issue_id)
|
||||
recurse trying again to insert issue_id
|
||||
|
||||
* Walk the entire tree, keeping track of the depth of each IssueId node (ie the number of SubNodes nodes above it)
|
||||
|
||||
* The largest depth is the number of bytes of the issue ids neede to ensure uniqueness
|
||||
Loading…
Add table
Add a link
Reference in a new issue