diff --git a/alembic/versions/1d18843a1994_add_is_fork_column_to_projects.py b/alembic/versions/1d18843a1994_add_is_fork_column_to_projects.py new file mode 100644 index 0000000..d3bf208 --- /dev/null +++ b/alembic/versions/1d18843a1994_add_is_fork_column_to_projects.py @@ -0,0 +1,41 @@ +"""Add is_fork column to projects + +Revision ID: 1d18843a1994 +Revises: 43df5e588a87 +Create Date: 2016-07-17 22:02:14.495146 + +""" + +# revision identifiers, used by Alembic. +revision = '1d18843a1994' +down_revision = '43df5e588a87' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + ''' Add is_fork column to project table''' + + op.add_column( + 'projects', + sa.Column( + '__is_fork', sa.Boolean, + default=False, + nullable=True) + ) + + op.execute('''UPDATE "projects" ''' + '''SET __is_fork=TRUE WHERE parent_id IS NOT NULL;''') + op.execute('''UPDATE "projects" ''' + '''SET __is_fork=FALSE WHERE parent_id IS NULL;''') + + + op.alter_column( + 'projects', + column_name='__is_fork', new_column_name='_is_fork', + nullable=False, existing_nullable=True) + +def downgrade(): + ''' Revert the _is_fork column added''' + op.drop_column('projects', '_is_fork') diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 10086e5..bbe7ec3 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1412,6 +1412,7 @@ def fork_project(session, user, repo, gitfolder, description=repo.description, user_id=user_obj.id, parent_id=repo.id, + _is_fork = True, hook_token=pagure.lib.login.id_generator(40) ) @@ -1542,11 +1543,11 @@ def search_projects( if fork is not None: if fork is True: projects = projects.filter( - model.Project.parent_id != None + model.Project._is_fork == True ) elif fork is False: projects = projects.filter( - model.Project.parent_id == None + model.Project._is_fork == False ) if tags: @@ -1615,11 +1616,11 @@ def get_project(session, name, user=None): ).filter( model.User.id == model.Project.user_id ).filter( - model.Project.parent_id != None + model.Project._is_fork == True ) else: query = query.filter( - model.Project.parent_id == None + model.Project._is_fork == False ) return query.first() @@ -2939,11 +2940,11 @@ def is_watching(session, user, reponame, repouser=None): ).filter( model.User.id == model.Project.user_id ).filter( - model.Project.parent_id != None + model.Project._is_fork == True ) else: query = query.filter( - model.Project.parent_id == None + model.Project._is_fork == False ) watcher = query.first() diff --git a/pagure/lib/model.py b/pagure/lib/model.py index 0ca61e3..2cf01f5 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -308,6 +308,7 @@ class Project(BASE): # The hook_token is used to sign the notification sent via web-hook hook_token = sa.Column(sa.String(40), nullable=False, unique=True) avatar_email = sa.Column(sa.Text, nullable=True) + _is_fork = sa.Column(sa.Boolean, default=False, nullable=False) parent_id = sa.Column( sa.Integer, sa.ForeignKey( @@ -354,7 +355,7 @@ class Project(BASE): @property def is_fork(self): ''' Return a boolean specifying if the project is a fork or not ''' - return self.parent_id is not None + return self._is_fork @property def fullname(self): @@ -362,7 +363,7 @@ class Project(BASE): project forked, otherwise it returns the project name. ''' str_name = self.name - if self.parent_id: + if self._is_fork: str_name = "forks/%s/%s" % (self.user.user, str_name) return str_name diff --git a/pagure/templates/repo_master.html b/pagure/templates/repo_master.html index dce98ff..70c626f 100644 --- a/pagure/templates/repo_master.html +++ b/pagure/templates/repo_master.html @@ -67,7 +67,7 @@ {% endif %} - {% if repo.is_fork %} + {% if repo.is_fork and repo.parent %}
Forked from {% if repo.parent.is_fork %} diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index da6d644..d3f431d 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -117,7 +117,7 @@ def view_repo(repo, username=None): repo=repo.name, identifier=branchname, filename='')) diff_commits = [] - if repo.is_fork: + if repo.is_fork and repo.parent: parentname = os.path.join( APP.config['GIT_FOLDER'], repo.parent.path) else: