From dd024fdaf5e3cb4aa62a8ca2f69dae6c96e3a11f Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Mar 27 2018 13:05:29 +0000 Subject: [PATCH 1/4] establish an order for readme files pagure#2758 Signed-off-by: Karsten Hopp --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index ff89933..96d6af6 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -78,6 +78,25 @@ def get_git_url_ssh(): pass return git_url_ssh +def get_preferred_readme(tree): + """ Establish some order about which README gets displayed + if there are several in the repository. If none of the listed + README files is availabe, display either the next file that + starts with 'README' or nothing at all. + """ + order = ['README.md', + 'README.rst', + 'README', + 'README.txt'] + readmes = [x for x in tree if x.name.startswith("README")] + if len(readmes): + for i in order: + for j in readmes: + if i == j.name: + return j + return readmes[0] + return None + @UI_NS.route('/.git') @UI_NS.route('//.git') @@ -132,18 +151,16 @@ def view_repo(repo, username=None, namespace=None): branchname = repo_obj.head.shorthand else: branchname = None - for i in tree: - name, ext = os.path.splitext(i.name) - if name == 'README': - content = __get_file_in_tree( - repo_obj, last_commits[0].tree, [i.name]).data - - readme, safe = pagure.doc_utils.convert_readme( - content, ext, - view_file_url=flask.url_for( - 'ui_ns.view_raw_file', username=username, - repo=repo_db.name, identifier=branchname, filename='')) - + readmefile = get_preferred_readme(tree) + if readmefile: + name, ext = os.path.splitext(readmefile.name) + content = __get_file_in_tree( + repo_obj, last_commits[0].tree, [readmefile.name]).data + readme, safe = pagure.doc_utils.convert_readme( + content, ext, + view_file_url=flask.url_for( + 'ui_ns.view_raw_file', username=username, + repo=repo_db.name, identifier=branchname, filename='')) return flask.render_template( 'repo_info.html', select='overview', From 018f64584f5287c737256b64d4a35cdd67c4aeb4 Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Mar 27 2018 13:05:29 +0000 Subject: [PATCH 2/4] pep8 whitespace fixes --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 96d6af6..e43f793 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -78,10 +78,11 @@ def get_git_url_ssh(): pass return git_url_ssh + def get_preferred_readme(tree): """ Establish some order about which README gets displayed if there are several in the repository. If none of the listed - README files is availabe, display either the next file that + README files is availabe, display either the next file that starts with 'README' or nothing at all. """ order = ['README.md', From 0f3f409d47bf74a811f1ee0ac44165bd115db14c Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Mar 27 2018 13:05:29 +0000 Subject: [PATCH 3/4] short-cut if there is only one README --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index e43f793..9fb93d4 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -90,11 +90,12 @@ def get_preferred_readme(tree): 'README', 'README.txt'] readmes = [x for x in tree if x.name.startswith("README")] - if len(readmes): + if len(readmes) > 1: for i in order: for j in readmes: if i == j.name: return j + elif len(readmes) == 1: return readmes[0] return None From 5192eb22435ad95f9a3cf0faf4a499939c6e0f6b Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Mar 27 2018 13:05:29 +0000 Subject: [PATCH 4/4] add unit-test for readme ordering Signed-off-by: Karsten Hopp --- diff --git a/tests/__init__.py b/tests/__init__.py index c7d23db..99f8240 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -632,7 +632,7 @@ def add_content_git_repo(folder, branch='master'): shutil.rmtree(newfolder) -def add_readme_git_repo(folder): +def add_readme_git_repo(folder, readme_name='README.rst'): """ Create a README file for the specified git repo. """ if not os.path.exists(folder): os.makedirs(folder) @@ -641,7 +641,8 @@ def add_readme_git_repo(folder): newfolder = tempfile.mkdtemp(prefix='pagure-tests') repo = pygit2.clone_repository(folder, newfolder) - content = """Pagure + if readme_name == 'README.rst': + content = """Pagure ====== :Author: Pierre-Yves Chibon @@ -658,6 +659,13 @@ Homepage: https://github.com/pypingou/pagure Dev instance: http://209.132.184.222/ (/!\\ May change unexpectedly, it's a dev instance ;-)) """ + else: + content = """Pagure +====== + +This is a placeholder """ + readme_name + """ +that should never get displayed on the website if there is a README.rst in the repo. +""" parents = [] commit = None @@ -669,9 +677,9 @@ Dev instance: http://209.132.184.222/ (/!\\ May change unexpectedly, it's a dev parents = [commit.oid.hex] # Create a file in that git repo - with open(os.path.join(newfolder, 'README.rst'), 'w') as stream: + with open(os.path.join(newfolder, readme_name), 'w') as stream: stream.write(content) - repo.index.add('README.rst') + repo.index.add(readme_name) repo.index.write() # Commits the files added diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index efaac6d..ac89707 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -1487,12 +1487,16 @@ class PagureFlaskRepotests(tests.Modeltests): tests.add_content_git_repo(os.path.join(self.path, 'repos', 'test.git')) tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git')) + tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'), 'README.txt') + tests.add_readme_git_repo(os.path.join(self.path, 'repos', 'test.git'), 'README.dummy') self.perfReset() output = self.app.get('/test') self.assertEqual(output.status_code, 200) self.assertFalse('

This repo is brand new!

' in output.data) self.assertFalse('Forked from' in output.data) + self.assertFalse('README.txt' in output.data) + self.assertFalse('README.dummy' in output.data) self.assertIn( '
\n' 'test project #1
', output.data)