- 1.7.0 - Command-line: - Add 'person search' command - Add 'person register' command - Add '-M/--multibuild-package' option to '[what]dependson' commands - Update '-U/--user' option in 'maintainer' command to accept also an email address - Fix 'branch' command to allow using '--new-package' option on packages that do not exist - Fix 'buildinfo' command to include obs:cli_debug_packages by default - Fix 'buildinfo' command to send complete local build environment as the 'build' command does - Fix 'maintainer --devel-project' to raise an error if running outside a working copy without any arguments - Fix handling arguments in 'service remoterun prj/pac' - Fix 'rebuild' command so the '--all' option conflicts with the 'package' argument - Fix crash when removing 'scmsync' element from dst package meta in 'linkpac' command - Fix crash when reading dst package meta in 'linkpac' command - Allow `osc rpmlint` to infer prj/pkg from CWD - Propagate exit code from the run() and do_() commandline methods - Give a hint where a scmsync git is hosted - Fix crash in 'updatepacmetafromspec' command when working with an incomplete spec - Improve 'updatepacmetafromspec' command to expand rpm spec macros by calling rpmspec to query the data - Improve 'build' and 'buildinfo' commands by uploading *.inc files to OBS for parsing BuildRequires (boo#1221340) - Improve 'service' command by printing names of running services - Improve 'getbinaries' command by ignoring source and debuginfo filters when a binary name is specified - Change 'build' command to pass '--jobs' option to 'build' tool only if 'build_jobs' > 0 - Clarify 'list' command's help that that listing binaries doesn't contain md5 checksums - Improve 'log' command: produce proper CSV and XML outputs, add -p/--patch option for the text output - Allow setlinkrev to set a specific vrev - Document '--buildtool-opt=--noclean' example in 'build' command's help - Fix handling the default package argument on the command-line - Configuration: - Document loading configuration from env variables - Connection: - Don't retry on error 400 - Remove now unused 'retry_on_400' http_request() option from XmlModel - Revert "Don't retry on 400 HTTP status code in core.server_diff()" - Revert "connection: Allow disabling retry on 400 HTTP status code" - Authentication: - Update SignatureAuthHandler to support specifying ssh key by its fingerprint - Use ssh key from ssh agent that contains comment 'obs=' - Use strings instead of bytes in SignatureAuthHandler - Cache password from SecretService to avoid spamming user with an accept dialog - Never ask for credentials when displaying help - Remove unused SignatureAuthHandler.get_fingerprint() - Library: - Add rootless build support for 'qemu' VM type - Support package linking of packages from scmsync projects - Fix do_createrequest() function to return None instead of request id - Replace invalid 'if' with 'elif' in BaseModel.dict() - Fix crash when no prefered packages are defined - Add XmlModel class that encapsulates manipulation with XML - Add obs_api.Person.cmd_register() for registering new users - Fix conf.get_config() to ignore file type bits when comparing oscrc perms - Fix conf.get_config() to correctly handle overrides when env variables are set - Fix output.tty.IS_INTERACTIVE when os.isatty() throws OSError - Improve cmdln.HelpFormatter to obey newline characters - Update list of color codes in 'output.tty' module - Remove core.setDevelProject() in favor of core.set_devel_project() - Move removing control characters to output.sanitize_text() - Improve sanitize_text() to keep selected CSI escape sequences - Add output.pipe_to_pager() that pipes lines to a pager without creating an intermediate temporary file - Fix output.safe_write() in connection with NamedTemporaryFile - Modernize output.run_pager() - Extend output.print_msg() to accept 'error' and 'warning' values of 'to_print' argument - Add XPathQuery class for translating keyword arguments to an xpath query - Add obs_api.Keyinfo class - Add obs_api.Package class - Add Package.get_revision_list() for listing commit log - Add obs_api.PackageSources class for handling OBS SCM sources - Add obs_api.Person class - Add obs_api.Project class - Add obs_api.Request class - Add obs_api.Token class - Allow storing apiurl in the XmlModel instances - Allow retrieving default field value from top-level model - Fix BaseModel to convert dictionaries to objects on retrieving a model list - Fix BaseModel to always deepcopy mutable defaults on first use - Implement do_snapshot() and has_changed() methods to determine changes in BaseModel - Implement total ordering on BaseModel - Add comments with available attributes/elements to edited XML - Refactoring: - Migrate repo {list,add,remove} commands to obs_api.Project - Migrate core.show_package_disabled_repos() to obs_api.Package - Migrate core.Package.update_package_meta() to obs_api.Package - Migrate core.get_repos_of_project() to obs_api.Project - Migrate core.get_repositories_of_project() to obs_api.Project - Migrate core.show_scmsync() to obs_api.{Package,Project} - Migrate core.set_devel_project() to obs_api.Package - Migrate core.show_devel_project() to obs_api.Package - Migrate Fetcher.run() to obs_api.Keyinfo - Migrate core.create_submit_request() to obs_api.Request - Migrate 'token' command to obs_api.Token - Migrate 'whois/user' command to obs_api.Person - Migrate 'signkey' command to obs_api.Keyinfo - Move print_msg() to the 'osc.output' module - Move run_pager() and get_default_pager() from 'core' to 'output' module - Move core.Package to obs_scm.Package - Move core.Project to obs_scm.Project - Move functions manipulating store from core to obs_scm.store - Move store.Store to obs_scm.Store - Move core.Linkinfo to obs_scm.Linkinfo - Move core.Serviceinfo to obs_scm.Serviceinfo - Move core.File to obs_scm.File - Merge _private.project.ProjectMeta into obs_api.Project - Spec: - Remove dependency on /usr/bin/python3 using %python3_fix_shebang macro (bsc#1212476) - 1.6.1 - Command-line: - Use busybox compatible commands for completion - Change 'wipe' command to use the new get_user_input() function - Fix error 500 in running 'meta attribute ' - Configuration: - Fix resolving config symlink to the actual config file - Honor XDG_CONFIG_HOME and XDG_CACHE_HOME env vars - Warn about ignoring XDG_CONFIG_HOME and ~/.config/osc/oscrc if ~/.oscrc exists - Library: - Error out when branching a scmsync package - New get_user_input() function for consistent handling of user input - Move xml_indent, xml_quote and xml_unquote to osc.util.xml module - Refactor makeurl(), deprecate query taking string or list arguments, drop osc_urlencode() - Remove all path quoting, rely on makeurl() - Always use dict query in makeurl() - Fix core.slash_split() to strip both leading and trailing slashes - 1.6.0 - Command-line: - The 'token --trigger' command no longer sets '--operation=runservice' by default. - Change 'token --create' command to require '--operation' - Fix 'linkdiff' command error 400: prj/pac/md5 not in repository - Update 'build' command to support building 'productcompose' build type with updateinfo.xml data - Don't show meter in terminals that are not interactive - Fix traceback when running osc from an arbitrary git repo that fails to map branch to a project (boo#1218170) - Configuration: - Implement reading credentials from environmental variables - Allow starting with an empty config if --configfile is either empty or points to /dev/null - Implement 'quiet' conf option - Password can be an empty string (commonly used with ssh auth) - Connection: - Allow -X HEAD on osc api requests as well - Library: - Fix credentials managers to consistently return Password - Fix Password.encode() on python < 3.8 - Refactor 'meter' module, use config settings to pick the right class - Convert to using f-strings - Use Field.get_callback to handle quiet/verbose and http_debug/http_full_debug options - Implement get_callback that allows modifying returned value to the Field class - Add support for List[BaseModel] type to Field class - Report class name when reporting an error during instantiating BaseModel object - Fix exporting an empty model field in BaseModel.dict() - Fix initializing a sub-model instance from a dictionary - Implement 'Enum' support in models - Fix Field.origin_type for Optional types - Drop unused 'exclude_unset' argument from BaseModel.dict() method - Store cached model defaults in self._defaults, avoid sharing references to mutable defaults - Limit model attributes to predefined fields by forbidding creating new attributes on fly - Store model values in self._values dict instead of private attributes - Spec: - Recommend openssh-clients for ssh-add that is required during ssh auth - Add 0%{?amzn} macro that wasn't usptreamed - 1.5.1 - Library: - Avoid using '/public/' API routes - Update 'osc.util.models' to avoid including lazy defaults in the rendered man pages - Spec: - Simplify distro-specific macros - Use %{?rhel} macros - 1.5.0 - Command-line: - Change 'rdiff' command to display diff for _project if no package is specified - Update 'build' command with initial support for 'productcompose' build type - Change 'build' command to disable preinstall images in rootless builds - Configuration: - Fix conf.write_initial_config() to use read_file() instead of deprecated readfp() - Other: - Support installing osc into virtualenv - Spec: - Recommend 'build' on openSUSE/SLE and 'obs-build' on all other distros - 1.4.4 - Command-line: - Fix autocompletion for new locations - Configuration: - Fix apiurl_aliases handling in OscOptions.__getitem__ - Fix crash when there's no [general]/apiurl option in the config file - Spec: - Install bash completion with .bash suffix rather than .sh - 1.4.3 - Configuration: - Allow undefined fields in Options and HostOptions - 1.4.2 - Command-line: - Change NoPBTextMeter to display no output at all - Fix retrieving the configured user in 'user' command - Configuration: - Restore 'passx' host option that contains an obfuscated password - Fix retrieving a password in case a function returns another callable - Fix retrieving config values in core.vc_export_env() - 1.4.1 - Configuration: - Always display apiurl when asking for credentials - Ask for new credentials when user is missing from an apiurl section in the config file - Library: - Fix testing revision for being empty - Fix core.change_request_state_template() to always return a string - Tests: - Replace 'git init -b' with 'git init' and 'git checkout -b' - Spec: - Run fdupes after install - List the python sitelib paths explicitly - Mark csh completion files as configs - Own zsh completion dirs to mute rpmlint errors - Move bash completion from /etc to /usr/share - 1.4.0 - Command-line: - Add rootless build support to 'build' command for 'kvm' and 'podman' vm types - Print a hint to clean the build root after a failed build - Avoid adding a newline to prompt in 'wipe' command - Fix 'build' command to pass '--vm-type' option to the underlying build tool - Add '--just-print-buildroot' option to print build root path and exit to 'build' command - Add support for keep_packages_locked on request revoke - Import zsh completition made by Holger Macht and improve it - Use XDG locations in completion - Fix 'search' command to resolve '-B .' to the current project - Add '-M/--multibuild-package' option to 'checkconstraints' command - Allow constraints file with remote request in 'checkconstraints' command - Unify how the 'commit' and 'build' commands work with '--noservice' option - Fix 'request show' command to print superseded_by information - Fix 'service' command to support already documented 'r' abbreviation for 'run' - Configuration: - Implement 'exclude_files' and 'include_files' config options that allow skipping files in the 'checkout' command - Fix api_host_options for custom CAs (cafile and capath options work again) - Switch 'osc.conf.config' from dict to Options class with type checking - Rename conf.Options.build_type to vm_type to be consistent with obs build and osc --vm-type option - Update list of supported vm_type values in conf.Options.vm_type - Remove any duplicated code loading configuration from ENV - Library: - Add 'osc.util.models' module implementing an alternative pydantic-like data validation - Add 'osc.util.xdg' module for handling XDG paths - Fix handling empty vm_type in Store.last_buildroot - Spec: - Install zsh completion - Build and install oscrc man page - 1.3.1 - Command-line: - Fix string + int concatenation errors in 'build' command by using f-strings instead - Fix '--all' option in 'rebuild' command - Fix 'build' command when '--alternative-project' option is specified and the git branch cannot be mapped to a project - Stop suggesting that the working directory is git/mercurial/svn/cvs - Be helpful in deprecating commands - Configuration: - Add more config options among integer options - Library: - Fix GitStore to error out properly if there is no 'origin' remote in the git repo - print_buildlog: Remove control characters from build log before printing (CVE-2012-1095) - 1.3.0 - Command-line: - Add experimental support of Git SCM to the 'build' command - Add experimental support of Git SCM to the 'service' command - Make 'meta' command capable of editing attributes - Change '--add' option in 'meta attribute' command to skip duplicate values - Add an interactive option to display build log in 'request list -i' command - Add '--setopt' option for setting config options from the command-line - Fix '--prefer-pkgs' option for noinstall="1" packages in kiwi builds - Change 'checkout' command to print open requests only when running in an interactive terminal - Enhance '--force' option description in the 'request' command - Connection: - Fix crash when HTTP_PROXY env contains no auth - Library: - Add 'git_scm' module for handling packages that live in git scm rather than usual obs scm - Change pop_project_package_from_args() to use get_store() to support Git SCM - Change osc.build module to use 'store' object instead of calling core.store_*() functions - Use alternative project if specified in parse_repoarchdescr() - Fix xml indent() on Python 3.6 - Fix less pager by adding '-R' to LESS env - Improve print_msg() and migrate some arbitrary prints to it - 1.2.0 - Command-line: - Add 'repo' command and subcommands for managing repositories in project meta - Extend 'browse' command to open requests in a web browser - Add highlighting for 'osc diff' and similar commands - Fix 'api' command to stream output to avoid running out of memory - Fix printing utf-8 characters to stdout - Connection: - Fix ValueError: Cannot set verify_mode to CERT_NONE when check_hostname is enabled - Authentication: - Correctly handle passwords with utf-8 characters - Library: - Fix crash when submiting a SCM package which has no _link - Fix local service execution of scmsync packages - Detect target package by its full name, instead of assuming its origin is identical to the source package type - Other: - Spell openSUSE correctly - 1.1.4 - Command-line: - Change 'review list' command to display open requests (state: new, review, declined) - Fix running osc in an AppImage by switching to the correct working directory - Handle ProtocolError exception - Library: - Add 'req_states' parameter to osc.core.get_review_list() - Connection: - Fix grabber to work with old urllib3 versions that do not contain URLSchemeUnknown exception - 1.1.3 - Command-line: - Backup edited messages and notify user about them when osc errors out - Consider only open requests when listing requests with a given review state - Fix 'diff' command when no files are specified - Configuration: - Add glob support to the 'trusted_prj' config option - Library: - Fix core.xmlindent() to work with ElementTree objects - 1.1.2 - Command-line: - Add '--buildtool-opt' option passing options to underlying rpmbuild to the 'build' command - Fix 'diff' command to support diffing selected files only - Identify inherited packages in the 'dependson' command output - Bring the '--debug' option back to the 'buildinfo' command - Fix 'buildhistory' command by setting the type of the '--limit' option to int - Library: - Fix a traceback when failed to unlock a keyring - Don't retry on 400 HTTP status code in core.server_diff() - Clean-up the '.old' folder if an exception happens - Document 'popt' attribute in the _link template - Fix build.get_repo() to return only directory that contains 'repodata/repomd.xml' - Connection: - Retry on receiving the following HTTP status codes: 400, 500, 502, 503, 504 - Allow disabling retry on 400 HTTP status code - Fix urlgrab to skip mirrors with invalid scheme - 1.1.1 - Command-line: - Fix 'creq' command that wasn't working at all - Fix 'ls' command when listing all projects by setting project argument to '/' - Fix regression: Run interactive config setup on missing config or credentials - Append plugin dirs to sys.path to allow loading modules installed next to the plugins - Do not recurse into subdirs when loading plugins - Configuration: - Display apiurl when asking for a username or a password - If apiurl is not set in interactive_config_setup(), use apiurl from DEFAULTS - Library: - Decode entities in HTTPError message body - 1.1.0 - Command-line: - New class-based commands - Sort commands before printing help - No longer read plugins from /var/lib/osc-plugins - Configuration: - Do not error out on setting oscrc permissions if the file is owned by another user - Library: - Restore 'include_request_from_project' conf option functionality - Simplify how babysitter works with options and config - Prefer f-strings over c-style string expansion - 1.0.1 - Configuration: - Fix a cut&paste error in setting 'disable_hdrmd5_check' config option - Connection: - Set Content-Type of POST requests without data to 'application/x-www-form-urlencoded' - 1.0.0 - Command-line: - Use '.' as a wildcard that resolves to a project or a package name from the current working copy, for example 'osc rdiff ./. -c ' - Add 'create-pbuild-config' (cpc) command - Add '--disable-build' option to the 'branch' command - Add '--disable-build' option to the 'linkpac' command - Add '-X/--extra-pkgs-from' option to the 'build' command - Add '--add' option to the 'meta' command that appends new values to the existing values - Replace '-q/--hide-legend' option in 'prjresults' command with global '-q/--quiet' option - Replace '--debug' option in the 'getbinaries' command with '--debuginfo' to avoid conflicts with the global '--debug' - Replace '--verbose' option in the 'build' command with '--verbose-mode' to avoid conflicts with the global '--verbose' - Replace '--version' option with 'version' command - Enable forwarding requests to the parent projects in 'rq list -i' and 'sr accept' commands - Make use of '-M/--multibuild' option consistent across the commands - Enhance '--force' option in the 'commit' command to allow deleting packages even if other packages depend on them - Print URLs and xpaths in the debug rather than the verbose mode - Fix 'add' command for github /archive/ URLs - Fix 'buildhistory' command to produce proper output using build_table() and a CSV writer - Fix 'linkpac' command to avoid copying a lock from a locked package to the target package - Fix 'setlinkrev' command to write a log message on setting a revision - Fix 'submitrequest' command not to error out on using an alias to apiurl - Fix 'update' command on project level for scm packages - Fix '--mine' option in the 'request' command to show only requests created by the user - Fix the documentation url in the 'maintenancerequest' and 'createincident' commands - Remove '--skip-validation' option from the 'commit' command - Remove '--oldpkg', '--oldprj' options from the 'rdiff' command - Remove 'create', 'list', 'log', 'show', 'decline', 'accept', 'delete', 'revoke' subcommands from the 'submitrequest' command - Remove '--seperate-requests' option from the 'submitrequest' command - Remove '--raw' option from the 'develproject' command - Remove '--maintained' option from the 'search' command - Remove 'deleteprj' command - Remove 'deletepac' command - Remove 'editmeta' command - Remove 'results_meta' command - Remove 'rlog' command - Remove 'rprjresults' command - Remove 'rresults' command - Configuration: - Add 'project_separator' config option - Add 'disable_hdrmd5_check' config option to ignore hdrmd5 mismatches - Remove 'plaintext_passwd' config option - Library: - Add Store class that will replace store_{read,write}* functions - Remove 'GnomeKeyringCredentialsManager' and related code - Remove Request.get_creator() method - Replace unmaintained cmdln.py with a custom code based on argparse - Replace core.findpacs() with Package.from_paths() and Package.from_paths_nofail() - Drop Python 2 support, Python 3.6 is the lowest supported version - Code cleanups, following PEP 8 and the latest best practices now - Improve handling of hdrmd5 mismatches - Handle uncompressed Debian packages - Replace arbitrary XML escaping code with xml_escape() - Fix race condition in using .old directory in Serviceinfo.execute() - Fix manual run of source service - Connection: - Switch http_request() to urllib3 and cryptography (drop M2Crypto dependency) - Warn when using HTTP connection, make HTTPS the default - Send HTTP header Accept: application/xml - Wait between retries - Authentication: - Support signature (ssh) auth including ssh-agent forwarding - Lock cookiejar to prevent unnecessary signature auth by waiting for a session cookie - Print user and apiurl when prompting for a password - Fix a crash when deleting a password - Known issues: - Commandline option values cannot start with '-', for example: osc build -x -vim Background: This is a limitation of underlying Python's argparse How to fix: Use '=' to join the option with its value: osc build -x=-vim URL: https://github.com/openSUSE/osc/issues/1227 - Commandline positional arguments no longer recognize '/' as a universal argument separator Background: This is an attempt to bring some consistency into argument parsing, reducing number of separators and value combinations How to fix: Separate / from / with a space URL: https://github.com/openSUSE/osc/issues/1272