Re: [yocto-patches] [layerindex-web][PATCH 1/1] layerindex: Use settings.DEFAULT_BRANCH instead of hardcoded branch name

Tim Orling <[email protected]> Wed, 24 Jun 2026 11:18:56 -0700
Newsgroups org.yoctoproject.lists.yocto-patches
Message-ID <CAOyo-856-P7s20Zwu70u5jniEbH65NdfDiJDeOuwKH=JLiAiSQ@mail.gmail.com>
Hi Sandeep,

It would also be nice to include a use case in the git commit explaining
what is driving this change?

Also, see comments below regarding the opportunity to rename the
'master_branch' variable to 'default_branch' for better code consistency.

On Wed, Jun 24, 2026 at 11:08 AM Piotr Bulinski <[email protected]> wrote:

> Hi Sandeep,
>
> Thank you for the patch.
>
> In the layerindex/update_layer.py you are updating the default value of `--branch`
> to an empty string,
> which is inconsistent with the rest of the changes in this patch.
>
> In the same file, system settings are already imported at line 298, so
> perhaps that import should be moved above the parser logic
> to allow you to use `settings.DEFAULT_BRANCH` as a default value for the
> `--branch` option instead of an empty string.
>
> Best regards,
> Piotr Buliński
>
> On Fri, Jun 19, 2026 at 11:52 PM Sandeep Gundlupet Raju <
> [email protected]> wrote:
>
>> Replace all hardcoded branch name references with settings.DEFAULT_BRANCH
>> so the default branch can be changed from a single location in settings.py
>> without modifying individual source files. DEFAULT_BRANCH defaults to
>> 'master'.
>>
>> - settings.py: add DEFAULT_BRANCH = 'master'
>> - docker/settings.py: add DEFAULT_BRANCH = 'master'
>> - layerindex/urls.py: use _DEFAULT_BRANCH from settings
>> - layerindex/views.py: use settings.DEFAULT_BRANCH (10 occurrences)
>> - layerindex/models.py: add import settings; use settings.DEFAULT_BRANCH
>> - layerindex/update.py: use settings.DEFAULT_BRANCH
>> - layerindex/update_layer.py: resolve branch from settings.DEFAULT_BRANCH
>> - layerindex/bulkchange.py: use settings.DEFAULT_BRANCH
>> - layerindex/tools/import_layer.py: use settings.DEFAULT_BRANCH
>> - layerindex/tools/import_wiki_layers.py: add import settings; use
>> DEFAULT_BRANCH
>> - layerindex/tools/import_classic_wiki.py: add import settings; use
>> DEFAULT_BRANCH
>> - layerindex/tools/update_classic_status.py: add import settings; use
>> DEFAULT_BRANCH
>> - rrs/tools/historytool.py: use settings.DEFAULT_BRANCH
>>
>> AI-Generated: GitHub Copilot (Claude Sonnet 4.6)
>>
>> Signed-off-by: Sandeep Gundlupet Raju <[email protected]>
>> ---
>>  docker/settings.py                        |  2 ++
>>  layerindex/bulkchange.py                  |  2 +-
>>  layerindex/models.py                      |  5 +++--
>>  layerindex/tools/import_classic_wiki.py   |  3 ++-
>>  layerindex/tools/import_layer.py          |  4 ++--
>>  layerindex/tools/import_wiki_layers.py    |  3 ++-
>>  layerindex/tools/update_classic_status.py |  7 ++++---
>>  layerindex/update.py                      |  2 +-
>>  layerindex/update_layer.py                |  4 +++-
>>  layerindex/urls.py                        | 16 +++++++++-------
>>  layerindex/views.py                       | 20 ++++++++++----------
>>  rrs/tools/historytool.py                  |  4 ++--
>>  settings.py                               |  3 +++
>>  13 files changed, 44 insertions(+), 31 deletions(-)
>>
>> diff --git a/docker/settings.py b/docker/settings.py
>> index e3ae0fd..85b7efd 100644
>> --- a/docker/settings.py
>> +++ b/docker/settings.py
>> @@ -315,3 +315,5 @@ SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO',
>> 'https')
>>  SECURE_BROWSER_XSS_FILTER = True
>>  SECURE_CONTENT_TYPE_NOSNIFF = True
>>
>> +# Default branch name used across the layer index
>> +DEFAULT_BRANCH = 'master'
>> diff --git a/layerindex/bulkchange.py b/layerindex/bulkchange.py
>> index 0ec4058..11cd7a6 100644
>> --- a/layerindex/bulkchange.py
>> +++ b/layerindex/bulkchange.py
>> @@ -98,7 +98,7 @@ def main():
>>      utils.setup_django()
>>      import settings
>>
>> -    branch = utils.get_branch('master')
>> +    branch = utils.get_branch(settings.DEFAULT_BRANCH)
>>      fetchdir = settings.LAYER_FETCH_DIR
>>
>>      import layerindex.models import LayerItem
>> diff --git a/layerindex/models.py b/layerindex/models.py
>> index 864264b..7a09962 100644
>> --- a/layerindex/models.py
>> +++ b/layerindex/models.py
>> @@ -18,6 +18,7 @@ import os.path
>>  import re
>>  import posixpath
>>  import codecs
>> +import settings
>>
>>  from . import utils
>>
>> @@ -190,7 +191,7 @@ class LayerItem(models.Model):
>>          return fetch_dir
>>
>>      def get_absolute_url(self):
>> -        return reverse('layer_item', args=('master',self.name));
>> +        return reverse('layer_item', args=(settings.DEFAULT_BRANCH,
>> self.name));
>>
>>      def __str__(self):
>>          return self.name
>> @@ -672,7 +673,7 @@ class ClassicRecipe(Recipe):
>>          ('E', 'Equivalent functionality'),
>>          ('D', 'Direct match'),
>>      ]
>> -    cover_layerbranch = models.ForeignKey(LayerBranch,
>> verbose_name='Covering layer', blank=True, null=True, limit_choices_to =
>> {'branch__name': 'master'}, on_delete=models.SET_NULL)
>> +    cover_layerbranch = models.ForeignKey(LayerBranch,
>> verbose_name='Covering layer', blank=True, null=True, limit_choices_to =
>> {'branch__name': settings.DEFAULT_BRANCH}, on_delete=models.SET_NULL)
>>      cover_pn = models.CharField('Covering recipe', max_length=100,
>> blank=True)
>>      cover_status = models.CharField(max_length=1,
>> choices=COVER_STATUS_CHOICES, default='U')
>>      cover_verified = models.BooleanField(default=False)
>> diff --git a/layerindex/tools/import_classic_wiki.py
>> b/layerindex/tools/import_classic_wiki.py
>> index bd7ab9a..e8c4c8c 100755
>> --- a/layerindex/tools/import_classic_wiki.py
>> +++ b/layerindex/tools/import_classic_wiki.py
>> @@ -84,6 +84,7 @@ def main():
>>      options, args = parser.parse_args(sys.argv)
>>
>>      utils.setup_django()
>> +    import settings
>>      from layerindex.models import LayerItem, LayerBranch, Recipe,
>> ClassicRecipe
>>      from django.db import transaction
>>
>> @@ -178,7 +179,7 @@ def main():
>>                              res =
>> list(LayerItem.objects.filter(name=newlayer)[:1])
>>                              if res:
>>                                  newlayeritem = res[0]
>> -                                recipe.cover_layerbranch =
>> newlayeritem.get_layerbranch('master')
>> +                                recipe.cover_layerbranch =
>> newlayeritem.get_layerbranch(settings.DEFAULT_BRANCH)
>>                              else:
>>                                  logger.info('Replacement layer "%s" for
>> %s could not be found' % (newlayer, pn))
>>                          recipe.cover_pn = newpn
>> diff --git a/layerindex/tools/import_layer.py
>> b/layerindex/tools/import_layer.py
>> index 79c679e..cdbd40d 100755
>> --- a/layerindex/tools/import_layer.py
>> +++ b/layerindex/tools/import_layer.py
>> @@ -284,7 +284,7 @@ def main():
>>      if not os.path.exists(fetchdir):
>>          os.makedirs(fetchdir)
>>
>> -    master_branch = utils.get_branch('master')
>> +    master_branch = utils.get_branch(settings.DEFAULT_BRANCH)
>>
>
We have an opportunity here to rename master_branch variable to
default_branch to align better with the new direction.


>      core_layer = None
>>      try:
>>          with transaction.atomic():
>> @@ -311,7 +311,7 @@ def main():
>>                  logger.error("Fetch failed: %s" % str(e))
>>                  sys.exit(1)
>>
>> -            actual_branch = 'master'
>> +            actual_branch = settings.DEFAULT_BRANCH
>>              if (options.actual_branch):
>>                  actual_branch = options.actual_branch
>>              try:
>> diff --git a/layerindex/tools/import_wiki_layers.py
>> b/layerindex/tools/import_wiki_layers.py
>> index 061f6df..f287bf6 100755
>> --- a/layerindex/tools/import_wiki_layers.py
>> +++ b/layerindex/tools/import_wiki_layers.py
>> @@ -35,6 +35,7 @@ def main():
>>      options, args = parser.parse_args(sys.argv)
>>
>>      utils.setup_django()
>> +    import settings
>>      from layerindex.models import LayerItem, LayerBranch, LayerDependency
>>      from django.db import transaction
>>
>> @@ -49,7 +50,7 @@ def main():
>>          nowiki_re = re.compile(r'</?nowiki>')
>>          link_re = re.compile(r'\[(http.*) +link\]')
>>          readme_re = re.compile(r';f=[a-zA-Z0-9/-]*README;')
>> -        master_branch = utils.get_branch('master')
>> +        master_branch = utils.get_branch(settings.DEFAULT_BRANCH)
>
>
Same comment here about 'master_branch' to 'default_branch' opportunity.


>
>
>          core_layer = None
>>          with transaction.atomic():
>>              for line in data.splitlines():
>> diff --git a/layerindex/tools/update_classic_status.py
>> b/layerindex/tools/update_classic_status.py
>> index aa5d2ef..c8c373b 100755
>> --- a/layerindex/tools/update_classic_status.py
>> +++ b/layerindex/tools/update_classic_status.py
>> @@ -83,6 +83,7 @@ def main():
>>      args = parser.parse_args()
>>
>>      utils.setup_django()
>> +    import settings
>>      from layerindex.models import LayerItem, LayerBranch, Recipe,
>> ClassicRecipe, Update, ComparisonRecipeUpdate
>>      from django.db import transaction
>>
>> @@ -121,7 +122,7 @@ def main():
>>      try:
>>          with transaction.atomic():
>>              def recipe_pn_query(pn):
>> -                return
>> Recipe.objects.filter(layerbranch__branch__name='master').filter(pn=pn).order_by('-layerbranch__layer__index_preference')
>> +                return
>> Recipe.objects.filter(layerbranch__branch__name=settings.DEFAULT_BRANCH).filter(pn=pn).order_by('-layerbranch__layer__index_preference')
>>
>>              if args.import_data:
>>                  recipequery =
>> ClassicRecipe.objects.filter(layerbranch=layerbranch)
>> @@ -141,9 +142,9 @@ def main():
>>                          orig_layerbranch = recipe.cover_layerbranch
>>                          recipe.cover_layerbranch =
>> layerbranches.get(cover_layer, None)
>>                          if recipe.cover_layerbranch is None:
>> -                            recipe.cover_layerbranch =
>> LayerBranch.objects.filter(branch__name='master',
>> layer__name=cover_layer).first()
>> +                            recipe.cover_layerbranch =
>> LayerBranch.objects.filter(branch__name=settings.DEFAULT_BRANCH,
>> layer__name=cover_layer).first()
>>                              if recipe.cover_layerbranch is None:
>> -                                logger.warning('Could not find cover
>> layer %s in master branch' % cover_layer)
>> +                                logger.warning('Could not find cover
>> layer %s in %s branch' % (cover_layer, settings.DEFAULT_BRANCH))
>>                              else:
>>                                  layerbranches[cover_layer] =
>> recipe.cover_layerbranch
>>                          if orig_layerbranch != recipe.cover_layerbranch:
>> diff --git a/layerindex/update.py b/layerindex/update.py
>> index df3939f..788daee 100755
>> --- a/layerindex/update.py
>> +++ b/layerindex/update.py
>> @@ -333,7 +333,7 @@ def main():
>>
>>              # Get a safe bitbake branch to call into from this script
>> (used later on)
>>              safe_bitbake_branch = 'origin/master'
>> -            master_branch = Branch.objects.filter(name='master').first()
>> +            master_branch =
>> Branch.objects.filter(name=settings.DEFAULT_BRANCH).first()
>>              if master_branch and master_branch.bitbake_branch:
>>                  safe_bitbake_branch = 'origin/' +
>> master_branch.bitbake_branch
>>
>
Same pattern here for 'master_branch' to 'default_branch' name change
opportunity.


>
>> diff --git a/layerindex/update_layer.py b/layerindex/update_layer.py
>> index 33c5cfb..6248f78 100644
>> --- a/layerindex/update_layer.py
>> +++ b/layerindex/update_layer.py
>> @@ -250,7 +250,7 @@ def main():
>>
>>      parser.add_option("-b", "--branch",
>>              help = "Specify branch to update",
>> -            action="store", dest="branch", default='master')
>> +            action="store", dest="branch", default='')
>>      parser.add_option("-l", "--layer",
>>              help = "Layer to update",
>>              action="store", dest="layer")
>> @@ -304,6 +304,8 @@ def main():
>>
>>      logger.setLevel(options.loglevel)
>>
>> +    if not options.branch:
>> +        options.branch = settings.DEFAULT_BRANCH
>>      branch = utils.get_branch(options.branch)
>>      if not branch:
>>          logger.error("Specified branch %s is not valid" % options.branch)
>> diff --git a/layerindex/urls.py b/layerindex/urls.py
>> index 51a832d..e7b0531 100644
>> --- a/layerindex/urls.py
>> +++ b/layerindex/urls.py
>> @@ -20,6 +20,8 @@ from layerindex.views import LayerListView,
>> LayerReviewListView, LayerReviewDeta
>>  from layerindex.models import LayerItem, Recipe, RecipeChangeset
>>  from rest_framework import routers
>>  from . import restviews
>> +import settings as _settings
>> +_DEFAULT_BRANCH = getattr(_settings, 'DEFAULT_BRANCH', 'master')
>>
>>  router = routers.DefaultRouter()
>>  router.register(r'branches', restviews.BranchViewSet)
>> @@ -39,23 +41,23 @@ router.register(r'incFiles', restviews.IncFileViewSet)
>>
>>  urlpatterns = [
>>      re_path(r'^$',
>> -        RedirectView.as_view(url=reverse_lazy('layer_list',
>> args=('master',)), permanent=False),
>> +        RedirectView.as_view(url=reverse_lazy('layer_list',
>> args=(_DEFAULT_BRANCH,)), permanent=False),
>>          name='frontpage'),
>>
>>      re_path(r'^api/', include(router.urls)),
>>
>>      re_path(r'^layers/$',
>> -        RedirectView.as_view(url=reverse_lazy('layer_list',
>> args=('master',)), permanent=False)),
>> +        RedirectView.as_view(url=reverse_lazy('layer_list',
>> args=(_DEFAULT_BRANCH,)), permanent=False)),
>>      re_path(r'^layer/(?P<slug>[-\.\w]+)/$',
>> -        RedirectParamsView.as_view(permanent=False), {'redirect_name':
>> 'layer_item', 'branch': 'master'}),
>> +        RedirectParamsView.as_view(permanent=False), {'redirect_name':
>> 'layer_item', 'branch': _DEFAULT_BRANCH}),
>>      re_path(r'^recipes/$',
>> -        RedirectView.as_view(url=reverse_lazy('recipe_search',
>> args=('master',)), permanent=False)),
>> +        RedirectView.as_view(url=reverse_lazy('recipe_search',
>> args=(_DEFAULT_BRANCH,)), permanent=False)),
>>      re_path(r'^machines/$',
>> -        RedirectView.as_view(url=reverse_lazy('machine_search',
>> args=('master',)), permanent=False)),
>> +        RedirectView.as_view(url=reverse_lazy('machine_search',
>> args=(_DEFAULT_BRANCH,)), permanent=False)),
>>      re_path(r'^distros/$',
>> -        RedirectView.as_view(url=reverse_lazy('distro_search',
>> args=('master',)), permanent=False)),
>> +        RedirectView.as_view(url=reverse_lazy('distro_search',
>> args=(_DEFAULT_BRANCH,)), permanent=False)),
>>      re_path(r'^classes/$',
>> -        RedirectView.as_view(url=reverse_lazy('class_search',
>> args=('master',)), permanent=False)),
>> +        RedirectView.as_view(url=reverse_lazy('class_search',
>> args=(_DEFAULT_BRANCH,)), permanent=False)),
>>      re_path(r'^submit/$', edit_layer_view, {'template_name':
>> 'layerindex/submitlayer.html'}, name="submit_layer"),
>>      re_path(r'^submit/thanks/$',
>>          TemplateView.as_view(
>> diff --git a/layerindex/views.py b/layerindex/views.py
>> index 84750f7..d3d8181 100644
>> --- a/layerindex/views.py
>> +++ b/layerindex/views.py
>> @@ -114,7 +114,7 @@ def delete_layer_view(request, template_name, slug):
>>          raise PermissionDenied
>>      if request.method == 'POST':
>>          layeritem.delete()
>> -        return HttpResponseRedirect(reverse('layer_list',
>> args=('master',)))
>> +        return HttpResponseRedirect(reverse('layer_list',
>> args=(settings.DEFAULT_BRANCH,)))
>>      else:
>>          return render(request, template_name, {
>>              'object': layeritem,
>> @@ -122,7 +122,7 @@ def delete_layer_view(request, template_name, slug):
>>              'cancel_url': layeritem.get_absolute_url()
>>          })
>>
>> -def update_layer_view(request, template_name, branch='master',
>> slug=None):
>> +def update_layer_view(request, template_name,
>> branch=settings.DEFAULT_BRANCH, slug=None):
>>      if not (request.user.is_authenticated and request.user.is_staff):
>>          raise PermissionDenied
>>      return_url = None
>> @@ -157,7 +157,7 @@ def update_layer_view(request, template_name,
>> branch='master', slug=None):
>>
>>      return HttpResponseRedirect(reverse_lazy('task_status',
>> kwargs={'task_id': task_id}))
>>
>> -def edit_layer_view(request, template_name, branch='master', slug=None):
>> +def edit_layer_view(request, template_name,
>> branch=settings.DEFAULT_BRANCH, slug=None):
>>      return_url = None
>>      branchobj = Branch.objects.filter(name=branch)[:1].get()
>>      if slug:
>> @@ -444,7 +444,7 @@ class LayerReviewListView(ListView):
>>          return super(LayerReviewListView, self).dispatch(request, *args,
>> **kwargs)
>>
>>      def get_queryset(self):
>> -        return
>> LayerBranch.objects.filter(branch__name='master').filter(layer__status='N').order_by('layer__name')
>> +        return
>> LayerBranch.objects.filter(branch__name=settings.DEFAULT_BRANCH).filter(layer__status='N').order_by('layer__name')
>>
>>  class LayerDetailView(DetailView):
>>      model = LayerItem
>> @@ -492,7 +492,7 @@ class LayerReviewDetailView(LayerDetailView):
>>          return super(LayerReviewDetailView, self).dispatch(request,
>> *args, **kwargs)
>>
>>      def get_context_data(self, **kwargs):
>> -        self.kwargs['branch'] = 'master'
>> +        self.kwargs['branch'] = settings.DEFAULT_BRANCH
>>          context = super(LayerReviewDetailView,
>> self).get_context_data(**kwargs)
>>          return context
>>
>> @@ -738,7 +738,7 @@ class AdvancedRecipeSearchView(ListView):
>>                  query = Q(**{"%s__icontains" % field: value})
>>              else:
>>                  query = Q(**{"%s" % field: value})
>> -            queryset =
>> Recipe.objects.filter(layerbranch__branch__name='master')
>> +            queryset =
>> Recipe.objects.filter(layerbranch__branch__name=settings.DEFAULT_BRANCH)
>>              layer = self.request.GET.get('layer', '')
>>              if layer:
>>                  queryset = queryset.filter(layerbranch__layer=layer)
>> @@ -825,7 +825,7 @@ class BulkChangeSearchView(AdvancedRecipeSearchView):
>>      def get_context_data(self, **kwargs):
>>          context = super(BulkChangeSearchView,
>> self).get_context_data(**kwargs)
>>          context['changeset'] = self.changeset
>> -        context['current_branch'] = 'master'
>> +        context['current_branch'] = settings.DEFAULT_BRANCH
>>          return context
>>
>>
>> @@ -1341,7 +1341,7 @@ class ClassicRecipeSearchView(RecipeSearchView):
>>              filtered = True
>>          qs, filtered = self.search_recipe_query(init_qs, query_string,
>> preferred=False)
>>          if qreversed:
>> -            init_rqs =
>> Recipe.objects.filter(layerbranch__branch__name='master')
>> +            init_rqs =
>> Recipe.objects.filter(layerbranch__branch__name=settings.DEFAULT_BRANCH)
>>              if layer_ids:
>>                  init_rqs =
>> init_rqs.filter(layerbranch__layer__id__in=layer_ids)
>>              excludeclasses_param =
>> self.request.GET.get('excludeclasses', '')
>> @@ -1735,7 +1735,7 @@ class
>> ComparisonRecipeSelectView(ClassicRecipeSearchView):
>>          return True
>>
>>      def get_context_data(self, **kwargs):
>> -        self.kwargs['branch'] = 'master'
>> +        self.kwargs['branch'] = settings.DEFAULT_BRANCH
>>          context = super(ComparisonRecipeSelectView,
>> self).get_context_data(**kwargs)
>>          recipe = get_object_or_404(ClassicRecipe, pk=self.kwargs['pk'])
>>          context['select_for'] = recipe
>> @@ -1761,7 +1761,7 @@ class
>> ComparisonRecipeSelectView(ClassicRecipeSearchView):
>>              layer_ids = [int(i) for i in selectedlayers_param.split(',')]
>>          else:
>>              layer_ids = []
>> -        init_qs =
>> Recipe.objects.filter(layerbranch__branch__name='master')
>> +        init_qs =
>> Recipe.objects.filter(layerbranch__branch__name=settings.DEFAULT_BRANCH)
>>          if layer_ids:
>>              init_qs = init_qs.filter(layerbranch__layer__in=layer_ids)
>>          qs, _ = self.search_recipe_query(init_qs, query_string,
>> preferred=False)
>> diff --git a/rrs/tools/historytool.py b/rrs/tools/historytool.py
>> index 9f03ade..92e4b04 100755
>> --- a/rrs/tools/historytool.py
>> +++ b/rrs/tools/historytool.py
>> @@ -77,7 +77,7 @@ def rrs_import(args):
>>      if not core_layer:
>>          logger.error('Unable to find core layer %s' %
>> settings.CORE_LAYER_NAME)
>>          return 1
>> -    core_layerbranch = core_layer.get_layerbranch('master')
>> +    core_layerbranch =
>> core_layer.get_layerbranch(settings.DEFAULT_BRANCH)
>>      if not core_layerbranch:
>>          logger.error('Unable to find branch master of layer %s' %
>> core_layerbranch.name)
>>          return 1
>> @@ -130,7 +130,7 @@ def rrs_remove_duplicates(args):
>>      if not core_layer:
>>          logger.error('Unable to find core layer %s' %
>> settings.CORE_LAYER_NAME)
>>          return 1
>> -    core_layerbranch = core_layer.get_layerbranch('master')
>> +    core_layerbranch =
>> core_layer.get_layerbranch(settings.DEFAULT_BRANCH)
>>      if not core_layerbranch:
>>          logger.error('Unable to find branch master of layer %s' %
>> core_layerbranch.name)
>>          return 1
>> diff --git a/settings.py b/settings.py
>> index 94b3dd1..08004cb 100644
>> --- a/settings.py
>> +++ b/settings.py
>> @@ -299,3 +299,6 @@ TASK_LOG_DIR = "/tmp/layerindex-task-logs"
>>
>>  # Full path to directory where rrs tools stores logs
>>  TOOLS_LOG_DIR = ""
>> +
>> +# Default branch name used across the layer index
>> +DEFAULT_BRANCH = 'master'
>> --
>> 2.43.0
>>
>>