diff --git a/swh/web/browse/views/content.py b/swh/web/browse/views/content.py --- a/swh/web/browse/views/content.py +++ b/swh/web/browse/views/content.py @@ -9,7 +9,7 @@ import sentry_sdk from django.http import HttpResponse, JsonResponse -from django.shortcuts import render +from django.shortcuts import redirect, render from swh.model.hashutil import hash_to_hex from swh.model.swhids import ObjectType @@ -22,7 +22,7 @@ request_content, ) from swh.web.common import archive, highlightjs, query -from swh.web.common.exc import NotFoundExc, http_status_code_message +from swh.web.common.exc import BadInputExc, NotFoundExc, http_status_code_message from swh.web.common.identifiers import get_swhids_info from swh.web.common.typing import ContentMetadata, SWHObjectInfo from swh.web.common.utils import gen_path_info, reverse, swh_object_icons @@ -170,18 +170,53 @@ return JsonResponse(diff_data) +def _get_content_from_request(request): + path = request.GET.get("path") + if path is None: + raise BadInputExc("Path must be provided as a query parameter.") + snapshot = request.GET.get("snapshot") + origin_url = request.GET.get("origin_url") + if snapshot is None and origin_url is None: + raise BadInputExc( + "Origin URL or Snapshot must be provided as a query parameter." + ) + snapshot_context = get_snapshot_context( + snapshot_id=snapshot, + origin_url=origin_url, + path=path, + timestamp=request.GET.get("timestamp"), + branch_name=request.GET.get("branch"), + release_name=request.GET.get("release"), + browse_context="content", + ) + root_directory = snapshot_context["root_directory"] + return archive.lookup_directory_with_path(root_directory, path) + + @browse_route( r"content/(?P[0-9a-z_:]*[0-9a-f]+.)/", + r"content/", view_name="browse-content", checksum_args=["query_string"], ) -def content_display(request, query_string): +def content_display(request, query_string=None): """Django view that produces an HTML display of a content identified by its hash value. - The url that points to it is + The URLs that points to it are :http:get:`/browse/content/[(algo_hash):](hash)/` + :http:get:`/browse/content/` """ + if query_string is None: + content = _get_content_from_request(request) + return redirect( + reverse( + "browse-content", + url_args={"query_string": f"sha1_git:{content['target']}"}, + query_params=request.GET, + ), + ) + algo, checksum = query.parse_hash(query_string) checksum = hash_to_hex(checksum) origin_url = request.GET.get("origin_url") diff --git a/swh/web/browse/views/origin.py b/swh/web/browse/views/origin.py --- a/swh/web/browse/views/origin.py +++ b/swh/web/browse/views/origin.py @@ -8,7 +8,6 @@ from swh.web.browse.browseurls import browse_route from swh.web.browse.snapshot_context import ( - browse_snapshot_content, browse_snapshot_directory, get_snapshot_context, ) @@ -79,14 +78,7 @@ The URL that points to it is :http:get:`/browse/origin/content/` """ - return browse_snapshot_content( - request, - origin_url=request.GET.get("origin_url"), - snapshot_id=request.GET.get("snapshot"), - timestamp=request.GET.get("timestamp"), - path=request.GET.get("path"), - selected_language=request.GET.get("language"), - ) + return redirect_to_new_route(request, "browse-content") @browse_route( @@ -104,14 +96,7 @@ :http:get:`/browse/origin/(origin_url)/visit/(timestamp)/content/(path)/` """ - return browse_snapshot_content( - request, - origin_url=origin_url, - snapshot_id=request.GET.get("snapshot"), - timestamp=timestamp, - path=path, - selected_language=request.GET.get("language"), - ) + return redirect_to_new_route(request, "browse-content") @browse_route(