Change meaning of --jql in issues command
--jql can now provide filtering in addition to the other command line arguments instead of replacing the whole query. This still allows the same behavior as before by specifying none of the other options.
This commit is contained in:
parent
0ce3932e9c
commit
6c1667046b
|
@ -98,8 +98,7 @@ def version(client):
|
||||||
@click.option('--flagged/--not-flagged', is_flag=True, default=None, help='Filter issues being flagged or not flagged')
|
@click.option('--flagged/--not-flagged', is_flag=True, default=None, help='Filter issues being flagged or not flagged')
|
||||||
@click.option('--order', help='Sort by this field')
|
@click.option('--order', help='Sort by this field')
|
||||||
@click.option('--asc/--desc', 'asc', help='Sort ascending/descending. Default: descending')
|
@click.option('--asc/--desc', 'asc', help='Sort ascending/descending. Default: descending')
|
||||||
@click.option('--jql', default='', help='Provide your own JQL query to search for issues. '
|
@click.option('--jql', help='Provide your own JQL query string to include in the search via AND.')
|
||||||
'Setting this ignores all other query options except --project.')
|
|
||||||
@pass_client
|
@pass_client
|
||||||
@pass_config
|
@pass_config
|
||||||
def issues(config, client, project, components, status, labels, texts, flagged, order, asc, jql):
|
def issues(config, client, project, components, status, labels, texts, flagged, order, asc, jql):
|
||||||
|
@ -110,50 +109,48 @@ def issues(config, client, project, components, status, labels, texts, flagged,
|
||||||
# TODO add filtering by created since
|
# TODO add filtering by created since
|
||||||
# TODO add filtering by updated
|
# TODO add filtering by updated
|
||||||
# TODO support pagination I guess? i.e. a limit
|
# TODO support pagination I guess? i.e. a limit
|
||||||
if not jql:
|
filters = []
|
||||||
filters = []
|
|
||||||
|
|
||||||
if texts:
|
if jql:
|
||||||
texts_jql = ' AND '.join([f'text ~ "{text}"' for text in texts])
|
filters.append(jql)
|
||||||
filters.append(f"( {texts_jql} )")
|
|
||||||
|
|
||||||
if components:
|
if texts:
|
||||||
component_list = ', '.join([f'"{c}"' for c in components])
|
texts_jql = ' AND '.join([f'text ~ "{text}"' for text in texts])
|
||||||
components_jql = f"component in ({component_list})"
|
filters.append(f"( {texts_jql} )")
|
||||||
filters.append(components_jql)
|
|
||||||
|
|
||||||
if status:
|
if components:
|
||||||
status_list = ', '.join([f'"{s}"' for s in status if not s.startswith('!')])
|
component_list = ', '.join([f'"{c}"' for c in components])
|
||||||
if status_list:
|
components_jql = f"component in ({component_list})"
|
||||||
status_jql = f"status IN ({status_list})"
|
filters.append(components_jql)
|
||||||
filters.append(status_jql)
|
|
||||||
status_list = ', '.join([f'"{s[1:]}"' for s in status if s.startswith('!')])
|
|
||||||
if status_list:
|
|
||||||
status_jql = f"status NOT IN ({status_list})"
|
|
||||||
filters.append(status_jql)
|
|
||||||
|
|
||||||
if labels:
|
if status:
|
||||||
labels_jql = ' AND '.join([f'labels = "{label}"' for label in labels])
|
status_list = ', '.join([f'"{s}"' for s in status if not s.startswith('!')])
|
||||||
filters.append(f"( {labels_jql} )")
|
if status_list:
|
||||||
|
status_jql = f"status IN ({status_list})"
|
||||||
|
filters.append(status_jql)
|
||||||
|
status_list = ', '.join([f'"{s[1:]}"' for s in status if s.startswith('!')])
|
||||||
|
if status_list:
|
||||||
|
status_jql = f"status NOT IN ({status_list})"
|
||||||
|
filters.append(status_jql)
|
||||||
|
|
||||||
if flagged is not None:
|
if labels:
|
||||||
if flagged:
|
labels_jql = ' AND '.join([f'labels = "{label}"' for label in labels])
|
||||||
flagged_jql = 'flagged IS NOT EMPTY'
|
filters.append(f"( {labels_jql} )")
|
||||||
else:
|
|
||||||
flagged_jql = 'flagged IS EMPTY'
|
|
||||||
filters.append(flagged_jql)
|
|
||||||
|
|
||||||
if project:
|
if flagged is not None:
|
||||||
filters.append(project_jql)
|
if flagged:
|
||||||
|
flagged_jql = 'flagged IS NOT EMPTY'
|
||||||
|
else:
|
||||||
|
flagged_jql = 'flagged IS EMPTY'
|
||||||
|
filters.append(flagged_jql)
|
||||||
|
|
||||||
jql = ' AND '.join(filters)
|
if project:
|
||||||
|
filters.append(project_jql)
|
||||||
|
|
||||||
if order:
|
jql = ' AND '.join(filters)
|
||||||
jql += f" ORDER BY {order} {'ASC' if asc else 'DESC'}"
|
|
||||||
|
|
||||||
else:
|
if order:
|
||||||
if project:
|
jql += f" ORDER BY {order} {'ASC' if asc else 'DESC'}"
|
||||||
jql = f"project = {project} AND {jql}"
|
|
||||||
|
|
||||||
print(f"Searching with query: {jql}")
|
print(f"Searching with query: {jql}")
|
||||||
issues = client.search_issues(jql)
|
issues = client.search_issues(jql)
|
||||||
|
|
Loading…
Reference in New Issue