/ TODO.md
TODO.md
  1  # Fix all bugs reported
  2  
  3  This is the number one requirement :)
  4  
  5  # Replace dependencies by dep formula
  6  
  7  Dep formula is a definition of a formula where can represent requirements
  8  (keyword) and packages but also can define alternatives of those:
  9  
 10  name1 = 1.0 | name2 != 1.0, name3 > 1.0 < 2.0 != 1.5, name4 +opt1 -opt2
 11  
 12  Difficulty: hard
 13  
 14  # Remove sqlite calls from frontend for (r)query
 15  
 16  sqlite should be a technical detail and thus should not be exposed by the
 17  library
 18  
 19  Difficulty: hard
 20  
 21  # Explore a rework of the library dependencies
 22  
 23  Would be nice to have a better mechanism that could track the symbols of the
 24  libraries (including versions)
 25  
 26  RPM already does this
 27  
 28  # Allow duplicate package handling
 29  
 30  Allow multiple packages having the same name as long as they don't conflict
 31  
 32  * pkg.conf:
 33  
 34    duplicatenumber: 2
 35    duplicate: { FreeBSD-kernel-*: 3, clibs: 5 }
 36  
 37  * Drop unique index on packages(name) or make it on name,version
 38  * annotation saveme
 39  * Upgrade:
 40  
 41    * get_local_pkg()
 42  
 43      * check saveme
 44      *  ensure only one
 45      *  in summary: check for saveme annotation, change to install
 46  
 47    * pkg_add()
 48  
 49      * check for saveme annotation, remove upgrade flag
 50  
 51  # Teach pkg repo to keep a list of unavailable packages
 52  
 53  When a build fail the package is not added to the repository. As such, a user who attempts to install the package is told that it does not exist, rather than it is just temporarily unavailable.
 54  
 55  The repo building process could create a list of failed packages during the build, and provide that as part of the repo in the form of a UCL file. If there are no result when looking for a package, we could check the failed packages list, and provide the user with a reason why the package is not available (build failed, RESTRICTED, BROKEN, EXPIRED, etc)
 56  
 57  A similar process may also make sense for the MOVED file.
 58  
 59  # Add a mechanism to allow a user to know when a package no longer exists in the remote repos
 60  
 61  pkg upgrade could grow a way to complain about packages it cannot upgrade because they no longer exist in the repo. When combined with the 'failed packages' list, and possibly the MOVED list, this could provide a reliable mechanism for the user to know that the package they have no longer exists in the ports tree.
 62  
 63  # Add a periodic script for reporting pkg check -d output
 64  
 65  # add a pkg wrongabi alias if possible in pkg.conf
 66  
 67  This would allow after a major upgrade to check what packages are still on the old ABI
 68  
 69  # Add a FreeBSD only check on FreeBSD version (which should also be added to packages)
 70  
 71  This would allow to only install packages for the right ABI and only if the binary was built on an
 72  OS version which is lower or equal that the one we are running on.
 73  
 74  # new groupinstall concept
 75  
 76  Add some new ucl files in the ports tree do define groups of files instead of meta ports
 77  
 78  # Test suite
 79  
 80  * Tests for pkg audit
 81  * Improve tests for triggers
 82  
 83  # pkg reposync/repomerge
 84  
 85  Currently there is a race easily obtain when you pkg install blah and the remote repository
 86  is synced.
 87  The idea of reposync/repomerge is to address this issue by having a command that takes two
 88  repository directories, one being the directory served by the webserver (named www below) and
 89  the other being the newly created repository (named new below) and does:
 90  
 91  * Open www/packagesite and rm all packages in www/All/ that aren't in it (this clean pkgs-1)
 92  * Copy all new/All/* to www/All/
 93  * Copy atomically meta.conf/meta.XXX/packagesite.XXX from new/ to www/
 94  
 95  This leaves the new/ directory with the new packagesite, the new pkgs and the
 96  pkgs-1 from the previous run.
 97  
 98  # Alternatives
 99  
100  Alternatives are install in /usr/local/share/alternatives
101  For a given alternative X we have a subdirectory alternatives/X
102  Then a files with the various alternatives names for each alternative
103  alternatives/php/7.2
104  alternatives/php/7.4
105  
106  A special alternatives is provided by the repo based on DEFAULT\_VERSION when
107  the alternative is version based, or a specific KNOBS when not based on version
108  this add a new file (symlink) to the package alternatives/php/default -> 7.2
109  
110  The alternative file is a ucl file, with a list of symlinks:
111  
112  Description: "yeah baby"
113  symlinks {
114  	file1: target1
115  	file2: target2
116  	file3: target3
117  }
118  exec: { type = lua; script: ... },
119  exec: { type = shell; script: ...}
120  
121  The exec part is an optional script which could be use to regenerate caches if needed for example
122  
123  In case pkg 2 pkg have the default symlink then the regular conflict mechanism would be used
124  By default pkg priorize user defined default before package defined repo
125  if user defined repo to not exists then it switches to the global defaut if in non interactive
126  or as the user if in interractives mode
127  
128  # List of "broken builds" in pkg repo metadata
129  
130  Would be nice if we could provide some notes to the repo metadata where for example
131  a builder car specify that some packages are broken and why, or failed to build and why
132  
133  # pipe long message to $PAGER
134  
135  It would be nice to add a way to detect if pkg is running on a terminal and
136  plans to print long messages, if so, automatically pipes the message to $PAGER