From 88a961cae4a71fe3245c56e14781fdb55e385704 Mon Sep 17 00:00:00 2001 From: Marcus Huewe Date: Tue, 24 Aug 2010 18:06:47 +0200 Subject: [PATCH] - rewrote addfile() and delete_file() methods from the Package class (for the details see below) - addfile(): * contains the complete logic for adding a file (=> simplified addFiles(...)) * semantic fixes - delete_file(): * semantic fixes - different handling of newly added/replaced files: * added/replaced files are tracked in the .osc/_to_be_added file - introduced new file state 'R': 'R' == "replaced" * usecase: osc rm ; osc add => new state is 'R' * conceptually 'R' is equal to 'A' - adapted revert() to support the new state (+ some other minor fixes) - added testcases for addfile() and delete_file() --- osc/core.py | 83 ++++++--- tests/addfile_fixtures/oscrc | 104 +++++++++++ tests/addfile_fixtures/osctest/.osc/_apiurl | 1 + tests/addfile_fixtures/osctest/.osc/_packages | 1 + tests/addfile_fixtures/osctest/.osc/_project | 1 + .../osctest/simple/.osc/_apiurl | 1 + .../osctest/simple/.osc/_files | 5 + .../osctest/simple/.osc/_osclib_version | 1 + .../osctest/simple/.osc/_package | 1 + .../osctest/simple/.osc/_project | 1 + .../osctest/simple/.osc/_to_be_deleted | 1 + .../addfile_fixtures/osctest/simple/.osc/foo | 1 + .../osctest/simple/.osc/merge | 4 + .../osctest/simple/.osc/nochange | 1 + tests/addfile_fixtures/osctest/simple/merge | 4 + .../addfile_fixtures/osctest/simple/nochange | 2 + tests/addfile_fixtures/osctest/simple/toadd1 | 1 + tests/addfile_fixtures/osctest/simple/toadd2 | 1 + tests/common.py | 8 + tests/deletefile_fixtures/oscrc | 104 +++++++++++ .../deletefile_fixtures/osctest/.osc/_apiurl | 1 + .../osctest/.osc/_packages | 1 + .../deletefile_fixtures/osctest/.osc/_project | 1 + .../osctest/already_deleted/.osc/_apiurl | 1 + .../osctest/already_deleted/.osc/_files | 5 + .../already_deleted/.osc/_osclib_version | 1 + .../osctest/already_deleted/.osc/_package | 1 + .../osctest/already_deleted/.osc/_project | 1 + .../osctest/already_deleted/.osc/_to_be_added | 1 + .../already_deleted/.osc/_to_be_deleted | 1 + .../osctest/already_deleted/.osc/foo | 1 + .../osctest/already_deleted/.osc/merge | 4 + .../osctest/already_deleted/.osc/nochange | 1 + .../osctest/already_deleted/merge | 4 + .../osctest/already_deleted/nochange | 2 + .../osctest/already_deleted/toadd1 | 1 + .../osctest/already_deleted/toadd2 | 1 + .../osctest/conflict/.osc/_apiurl | 1 + .../osctest/conflict/.osc/_files | 5 + .../osctest/conflict/.osc/_in_conflict | 1 + .../osctest/conflict/.osc/_osclib_version | 1 + .../osctest/conflict/.osc/_package | 1 + .../osctest/conflict/.osc/_project | 1 + .../osctest/conflict/.osc/_to_be_added | 1 + .../osctest/conflict/.osc/foo | 1 + .../osctest/conflict/.osc/merge | 4 + .../osctest/conflict/.osc/nochange | 1 + .../deletefile_fixtures/osctest/conflict/foo | 5 + .../osctest/conflict/foo.mine | 1 + .../osctest/conflict/foo.r2 | 1 + .../osctest/conflict/merge | 4 + .../osctest/conflict/nochange | 2 + .../osctest/conflict/toadd1 | 1 + .../osctest/conflict/toadd2 | 1 + .../osctest/delete/.osc/_apiurl | 1 + .../osctest/delete/.osc/_files | 5 + .../osctest/delete/.osc/_osclib_version | 1 + .../osctest/delete/.osc/_package | 1 + .../osctest/delete/.osc/_project | 1 + .../osctest/delete/.osc/_to_be_deleted | 1 + .../osctest/delete/.osc/foo | 1 + .../osctest/delete/.osc/merge | 4 + .../osctest/delete/.osc/nochange | 1 + .../deletefile_fixtures/osctest/delete/merge | 4 + .../osctest/delete/nochange | 2 + .../deletefile_fixtures/osctest/delete/toadd1 | 1 + .../deletefile_fixtures/osctest/delete/toadd2 | 1 + .../osctest/replace/.osc/_apiurl | 1 + .../osctest/replace/.osc/_files | 5 + .../osctest/replace/.osc/_osclib_version | 1 + .../osctest/replace/.osc/_package | 1 + .../osctest/replace/.osc/_project | 1 + .../osctest/replace/.osc/_to_be_added | 2 + .../osctest/replace/.osc/foo | 1 + .../osctest/replace/.osc/merge | 4 + .../osctest/replace/.osc/nochange | 1 + tests/deletefile_fixtures/osctest/replace/foo | 1 + .../deletefile_fixtures/osctest/replace/merge | 1 + .../osctest/replace/nochange | 2 + .../osctest/replace/toadd1 | 1 + .../osctest/replace/toadd2 | 1 + .../osctest/simple/.osc/_apiurl | 1 + .../osctest/simple/.osc/_files | 5 + .../osctest/simple/.osc/_osclib_version | 1 + .../osctest/simple/.osc/_package | 1 + .../osctest/simple/.osc/_project | 1 + .../osctest/simple/.osc/_to_be_added | 1 + .../osctest/simple/.osc/foo | 1 + .../osctest/simple/.osc/merge | 4 + .../osctest/simple/.osc/nochange | 1 + tests/deletefile_fixtures/osctest/simple/foo | 1 + .../deletefile_fixtures/osctest/simple/merge | 4 + .../osctest/simple/nochange | 2 + .../deletefile_fixtures/osctest/simple/toadd1 | 1 + .../deletefile_fixtures/osctest/simple/toadd2 | 1 + tests/test_addfiles.py | 84 +++++++++ tests/test_deletefiles.py | 171 ++++++++++++++++++ 97 files changed, 684 insertions(+), 29 deletions(-) create mode 100644 tests/addfile_fixtures/oscrc create mode 100644 tests/addfile_fixtures/osctest/.osc/_apiurl create mode 100644 tests/addfile_fixtures/osctest/.osc/_packages create mode 100644 tests/addfile_fixtures/osctest/.osc/_project create mode 100644 tests/addfile_fixtures/osctest/simple/.osc/_apiurl create mode 100644 tests/addfile_fixtures/osctest/simple/.osc/_files create mode 100644 tests/addfile_fixtures/osctest/simple/.osc/_osclib_version create mode 100644 tests/addfile_fixtures/osctest/simple/.osc/_package create mode 100644 tests/addfile_fixtures/osctest/simple/.osc/_project create mode 100644 tests/addfile_fixtures/osctest/simple/.osc/_to_be_deleted create mode 100644 tests/addfile_fixtures/osctest/simple/.osc/foo create mode 100644 tests/addfile_fixtures/osctest/simple/.osc/merge create mode 100644 tests/addfile_fixtures/osctest/simple/.osc/nochange create mode 100644 tests/addfile_fixtures/osctest/simple/merge create mode 100644 tests/addfile_fixtures/osctest/simple/nochange create mode 100644 tests/addfile_fixtures/osctest/simple/toadd1 create mode 100644 tests/addfile_fixtures/osctest/simple/toadd2 create mode 100644 tests/deletefile_fixtures/oscrc create mode 100644 tests/deletefile_fixtures/osctest/.osc/_apiurl create mode 100644 tests/deletefile_fixtures/osctest/.osc/_packages create mode 100644 tests/deletefile_fixtures/osctest/.osc/_project create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/_apiurl create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/_files create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/_osclib_version create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/_package create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/_project create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/_to_be_added create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/_to_be_deleted create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/foo create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/merge create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/.osc/nochange create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/merge create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/nochange create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/toadd1 create mode 100644 tests/deletefile_fixtures/osctest/already_deleted/toadd2 create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/_apiurl create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/_files create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/_in_conflict create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/_osclib_version create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/_package create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/_project create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/_to_be_added create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/foo create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/merge create mode 100644 tests/deletefile_fixtures/osctest/conflict/.osc/nochange create mode 100644 tests/deletefile_fixtures/osctest/conflict/foo create mode 100644 tests/deletefile_fixtures/osctest/conflict/foo.mine create mode 100644 tests/deletefile_fixtures/osctest/conflict/foo.r2 create mode 100644 tests/deletefile_fixtures/osctest/conflict/merge create mode 100644 tests/deletefile_fixtures/osctest/conflict/nochange create mode 100644 tests/deletefile_fixtures/osctest/conflict/toadd1 create mode 100644 tests/deletefile_fixtures/osctest/conflict/toadd2 create mode 100644 tests/deletefile_fixtures/osctest/delete/.osc/_apiurl create mode 100644 tests/deletefile_fixtures/osctest/delete/.osc/_files create mode 100644 tests/deletefile_fixtures/osctest/delete/.osc/_osclib_version create mode 100644 tests/deletefile_fixtures/osctest/delete/.osc/_package create mode 100644 tests/deletefile_fixtures/osctest/delete/.osc/_project create mode 100644 tests/deletefile_fixtures/osctest/delete/.osc/_to_be_deleted create mode 100644 tests/deletefile_fixtures/osctest/delete/.osc/foo create mode 100644 tests/deletefile_fixtures/osctest/delete/.osc/merge create mode 100644 tests/deletefile_fixtures/osctest/delete/.osc/nochange create mode 100644 tests/deletefile_fixtures/osctest/delete/merge create mode 100644 tests/deletefile_fixtures/osctest/delete/nochange create mode 100644 tests/deletefile_fixtures/osctest/delete/toadd1 create mode 100644 tests/deletefile_fixtures/osctest/delete/toadd2 create mode 100644 tests/deletefile_fixtures/osctest/replace/.osc/_apiurl create mode 100644 tests/deletefile_fixtures/osctest/replace/.osc/_files create mode 100644 tests/deletefile_fixtures/osctest/replace/.osc/_osclib_version create mode 100644 tests/deletefile_fixtures/osctest/replace/.osc/_package create mode 100644 tests/deletefile_fixtures/osctest/replace/.osc/_project create mode 100644 tests/deletefile_fixtures/osctest/replace/.osc/_to_be_added create mode 100644 tests/deletefile_fixtures/osctest/replace/.osc/foo create mode 100644 tests/deletefile_fixtures/osctest/replace/.osc/merge create mode 100644 tests/deletefile_fixtures/osctest/replace/.osc/nochange create mode 100644 tests/deletefile_fixtures/osctest/replace/foo create mode 100644 tests/deletefile_fixtures/osctest/replace/merge create mode 100644 tests/deletefile_fixtures/osctest/replace/nochange create mode 100644 tests/deletefile_fixtures/osctest/replace/toadd1 create mode 100644 tests/deletefile_fixtures/osctest/replace/toadd2 create mode 100644 tests/deletefile_fixtures/osctest/simple/.osc/_apiurl create mode 100644 tests/deletefile_fixtures/osctest/simple/.osc/_files create mode 100644 tests/deletefile_fixtures/osctest/simple/.osc/_osclib_version create mode 100644 tests/deletefile_fixtures/osctest/simple/.osc/_package create mode 100644 tests/deletefile_fixtures/osctest/simple/.osc/_project create mode 100644 tests/deletefile_fixtures/osctest/simple/.osc/_to_be_added create mode 100644 tests/deletefile_fixtures/osctest/simple/.osc/foo create mode 100644 tests/deletefile_fixtures/osctest/simple/.osc/merge create mode 100644 tests/deletefile_fixtures/osctest/simple/.osc/nochange create mode 100644 tests/deletefile_fixtures/osctest/simple/foo create mode 100644 tests/deletefile_fixtures/osctest/simple/merge create mode 100644 tests/deletefile_fixtures/osctest/simple/nochange create mode 100644 tests/deletefile_fixtures/osctest/simple/toadd1 create mode 100644 tests/deletefile_fixtures/osctest/simple/toadd2 create mode 100644 tests/test_addfiles.py create mode 100644 tests/test_deletefiles.py diff --git a/osc/core.py b/osc/core.py index e4871341..959d8bf7 100644 --- a/osc/core.py +++ b/osc/core.py @@ -796,8 +796,22 @@ class Package: return r def addfile(self, n): - st = os.stat(os.path.join(self.dir, n)) - shutil.copyfile(os.path.join(self.dir, n), os.path.join(self.storedir, n)) + if not os.path.exists(os.path.join(self.absdir, n)): + raise IOError('error: file \'%s\' does not exist' % n) + if n in self.to_be_deleted: + self.to_be_deleted.remove(n) +# self.delete_storefile(n) + self.write_deletelist() + elif n in self.filenamelist or n in self.to_be_added: + raise oscerr.PackageFileConflict(self.prjname, self.name, n, 'osc: warning: \'%s\' is already under version control' % n) +# shutil.copyfile(os.path.join(self.dir, n), os.path.join(self.storedir, n)) + if self.dir != '.': + pathname = os.path.join(self.dir, n) + else: + pathname = n + self.to_be_added.append(n) + self.write_addlist() + print statfrmt('A', pathname) def delete_file(self, n, force=False): """deletes a file if possible and marks the file as deleted""" @@ -807,14 +821,20 @@ class Package: except IOError, ioe: if not force: raise ioe - if state in ['?', 'A', 'M'] and not force: + if state in ['?', 'A', 'M', 'R', 'C'] and not force: return (False, state) self.delete_localfile(n) - if state != 'A': + if state in ('A', 'R'): + self.to_be_added.remove(n) + self.write_addlist() + elif state == 'C': + # don't remove "merge files" (*.r, *.mine...) + # that's why we don't use clear_from_conflictlist + self.in_conflict.remove(n) + self.write_conflictlist() + if not state in ('A', '?'): self.put_on_deletelist(n) self.write_deletelist() - else: - self.delete_storefile(n) return (True, state) def delete_storefile(self, n): @@ -833,6 +853,10 @@ class Package: if n not in self.in_conflict: self.in_conflict.append(n) + def put_on_addlist(self, n): + if n not in self.to_be_added: + self.to_be_added.append(n) + def clear_from_conflictlist(self, n): """delete an entry from the file, and remove the file if it would be empty""" if n in self.in_conflict: @@ -878,6 +902,9 @@ class Package: else: store_write_string(self.absdir, '_size_limit', self.size_limit) + def write_addlist(self): + self.__write_storelist('_to_be_added', self.to_be_added) + def write_deletelist(self): self.__write_storelist('_to_be_deleted', self.to_be_deleted) @@ -901,6 +928,8 @@ class Package: http_PUT(u, file = os.path.join(self.dir, n)) shutil.copyfile(os.path.join(self.dir, n), os.path.join(self.storedir, n)) + if n in self.to_be_added: + self.to_be_added.remove(n) def commit(self, msg='', validators=None, verbose_validation=None): todo_send = [] @@ -936,7 +965,7 @@ class Package: for filename in self.todo: if not filename.startswith('_service:') and not filename.startswith('_service_'): st = self.status(filename) - if st == 'A' or st == 'M': + if st == 'A' or st == 'M' or st == 'R': todo_send.append(filename) print statfrmt('Sending', os.path.join(pathn, filename)) elif st == 'D': @@ -1149,8 +1178,9 @@ class Package: self.filelist.append(f) self.filenamelist.append(f.name) - self.to_be_deleted = read_tobedeleted(self.dir) - self.in_conflict = read_inconflict(self.dir) + self.to_be_added = read_tobeadded(self.absdir) + self.to_be_deleted = read_tobedeleted(self.absdir) + self.in_conflict = read_inconflict(self.absdir) self.linkrepair = os.path.isfile(os.path.join(self.storedir, '_linkrepair')) self.size_limit = read_sizelimit(self.dir) self.meta = self.ismetamode() @@ -1233,7 +1263,8 @@ class Package: file storefile file present STATUS exists exists in _files - x x - 'A' + x - - 'A' and listed in _to_be_added + x x - 'R' and listed in _to_be_added x x x ' ' if digest differs: 'M' and if in conflicts file: 'C' x - - '?' @@ -1263,7 +1294,9 @@ class Package: state = 'C' elif n in self.skipped: state = 'S' - elif exists and exists_in_store and not known_by_meta: + elif n in self.to_be_added and exists_in_store: + state = 'R' + elif n in self.to_be_added: state = 'A' elif exists and exists_in_store and known_by_meta: if dgst(os.path.join(self.absdir, n)) != self.findfilebyname(n).md5: @@ -1743,17 +1776,21 @@ rev: %s raise ValueError("Empty filelist") def revert(self, filename): - if not filename in self.filenamelist: + if not filename in self.filenamelist and not filename in self.to_be_added: raise IOError('file \'%s\' is not under version control' % filename) - if not os.path.exists(os.path.join(self.storedir, filename)): + if filename in self.filenamelist and not os.path.exists(os.path.join(self.storedir, filename)): raise oscerr.PackageInternalError('file \'%s\' is listed in filenamelist but no storefile exists' % filename) - shutil.copyfile(os.path.join(self.storedir, filename), os.path.join(self.absdir, filename)) state = self.status(filename) + if state != 'A': + shutil.copyfile(os.path.join(self.storedir, filename), os.path.join(self.absdir, filename)) if state == 'D': self.to_be_deleted.remove(filename) self.write_deletelist() elif state == 'C': self.clear_from_conflictlist(filename) + elif state == 'A' or state == 'R': + self.to_be_added.remove(filename) + self.write_addlist() class ReviewState: """for objects to represent the review state in a request""" @@ -2148,6 +2185,9 @@ def store_readlist(dir, name): r = [line.strip() for line in open(os.path.join(dir, store, name), 'r')] return r +def read_tobeadded(dir): + return store_readlist(dir, '_to_be_added') + def read_tobedeleted(dir): return store_readlist(dir, '_to_be_deleted') @@ -5042,21 +5082,6 @@ def addFiles(filenames, prj_obj = None): if filename in pac.excluded: print >>sys.stderr, 'osc: warning: \'%s\' is excluded from a working copy' % filename continue - if filename in pac.filenamelist: - # check if this is a re-add after delete. - pac.to_be_deleted = read_tobedeleted(pac.dir) - try: - pac.to_be_deleted.remove(filename) - print >>sys.stderr, 'osc: Note: \'%s\' was deleted, is now re-added' % filename - pac.write_deletelist() - except: - print >>sys.stderr, 'osc: Warning: \'%s\' is already under version control' % filename - continue - if pac.dir != '.': - pathname = os.path.join(pac.dir, filename) - else: - pathname = filename - print statfrmt('A', pathname) pac.addfile(filename) def getPrjPacPaths(path): diff --git a/tests/addfile_fixtures/oscrc b/tests/addfile_fixtures/oscrc new file mode 100644 index 00000000..04b2b0ab --- /dev/null +++ b/tests/addfile_fixtures/oscrc @@ -0,0 +1,104 @@ +[general] +# URL to access API server, e.g. https://api.opensuse.org +# you also need a section [https://api.opensuse.org] with the credentials +apiurl = http://localhost +# Downloaded packages are cached here. Must be writable by you. +#packagecachedir = /var/tmp/osbuild-packagecache +# Wrapper to call build as root (sudo, su -, ...) +#su-wrapper = su -c +# rootdir to setup the chroot environment +# can contain %(repo)s, %(arch)s, %(project)s and %(package)s for replacement, e.g. +# /srv/oscbuild/%(repo)s-%(arch)s or +# /srv/oscbuild/%(repo)s-%(arch)s-%(project)s-%(package)s +#build-root = /var/tmp/build-root +# compile with N jobs (default: "getconf _NPROCESSORS_ONLN") +#build-jobs = N +# build-type to use - values can be (depending on the capabilities of the 'build' script) +# empty - chroot build +# kvm - kvm VM build (needs build-device, build-swap, build-memory) +# xen - xen VM build (needs build-device, build-swap, build-memory) +# experimental: +# qemu - qemu VM build +# lxc - lxc build +#build-type = +# build-device is the disk-image file to use as root for VM builds +# e.g. /var/tmp/FILE.root +#build-device = /var/tmp/FILE.root +# build-swap is the disk-image to use as swap for VM builds +# e.g. /var/tmp/FILE.swap +#build-swap = /var/tmp/FILE.swap +# build-memory is the amount of memory used in the VM +# value in MB - e.g. 512 +#build-memory = 512 +# build-vmdisk-rootsize is the size of the disk-image used as root in a VM build +# values in MB - e.g. 4096 +#build-vmdisk-rootsize = 4096 +# build-vmdisk-swapsize is the size of the disk-image used as swap in a VM build +# values in MB - e.g. 1024 +#build-vmdisk-swapsize = 1024 +# Numeric uid:gid to assign to the "abuild" user in the build-root +# or "caller" to use the current users uid:gid +# This is convenient when sharing the buildroot with ordinary userids +# on the host. +# This should not be 0 +# build-uid = +# extra packages to install when building packages locally (osc build) +# this corresponds to osc build's -x option and can be overridden with that +# -x '' can also be given on the command line to override this setting, or +# you can have an empty setting here. +#extra-pkgs = vim gdb strace +# build platform is used if the platform argument is omitted to osc build +#build_repository = openSUSE_Factory +# default project for getpac or bco +#getpac_default_project = openSUSE:Factory +# alternate filesystem layout: have multiple subdirs, where colons were. +#checkout_no_colon = 0 +# local files to ignore with status, addremove, .... +#exclude_glob = .osc CVS .svn .* _linkerror *~ #*# *.orig *.bak *.changes.* +# keep passwords in plaintext. If you see this comment, your osc +# already uses the encrypted password, and only keeps them in plain text +# for backwards compatibility. Default will change to 0 in future releases. +# You can remove the plaintext password without harm, if you do not need +# backwards compatibility. +#plaintext_passwd = 1 +# limit the age of requests shown with 'osc req list'. +# this is a default only, can be overridden by 'osc req list -D NNN' +# Use 0 for unlimted. +#request_list_days = 0 +# show info useful for debugging +#debug = 1 +# show HTTP traffic useful for debugging +#http_debug = 1 +# Skip signature verification of packages used for build. +#no_verify = 1 +# jump into the debugger in case of errors +#post_mortem = 1 +# print call traces in case of errors +#traceback = 1 +# use KDE/Gnome/MacOS/Windows keyring for credentials if available +#use_keyring = 1 +# check for unversioned/removed files before commit +#check_filelist = 1 +# check for pending requests after executing an action (e.g. checkout, update, commit) +#check_for_request_on_action = 0 +# what to do with the source package if the submitrequest has been accepted. If +# nothing is specified the API default is used +#submitrequest_on_accept_action = cleanup|update|noupdate +#review requests interactively (default: off) +#request_show_review = 1 +# Directory with executables to validate sources, esp before committing +#source_validator_directory = /usr/lib/osc/source_validators + +[http://localhost] +user = Admin +pass = opensuse +passx = QlpoOTFBWSZTWeTSblkAAAGBgAIBygAgADDACGNEHxaYXckU4UJDk0m5ZA== +# set aliases for this apiurl +# aliases = foo, bar +# email used in .changes, unless the one from osc meta prj will be used +# email = +# additional headers to pass to a request, e.g. for special authentication +#http_headers = Host: foofoobar, +# User: mumblegack +# Force using of keyring for this API +#keyring = 1 diff --git a/tests/addfile_fixtures/osctest/.osc/_apiurl b/tests/addfile_fixtures/osctest/.osc/_apiurl new file mode 100644 index 00000000..0afeace7 --- /dev/null +++ b/tests/addfile_fixtures/osctest/.osc/_apiurl @@ -0,0 +1 @@ +http://localhost diff --git a/tests/addfile_fixtures/osctest/.osc/_packages b/tests/addfile_fixtures/osctest/.osc/_packages new file mode 100644 index 00000000..04e56f00 --- /dev/null +++ b/tests/addfile_fixtures/osctest/.osc/_packages @@ -0,0 +1 @@ + diff --git a/tests/addfile_fixtures/osctest/.osc/_project b/tests/addfile_fixtures/osctest/.osc/_project new file mode 100644 index 00000000..b83ffd3c --- /dev/null +++ b/tests/addfile_fixtures/osctest/.osc/_project @@ -0,0 +1 @@ +osctest diff --git a/tests/addfile_fixtures/osctest/simple/.osc/_apiurl b/tests/addfile_fixtures/osctest/simple/.osc/_apiurl new file mode 100644 index 00000000..0afeace7 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/.osc/_apiurl @@ -0,0 +1 @@ +http://localhost diff --git a/tests/addfile_fixtures/osctest/simple/.osc/_files b/tests/addfile_fixtures/osctest/simple/.osc/_files new file mode 100644 index 00000000..f0dac1f4 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/.osc/_files @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/tests/addfile_fixtures/osctest/simple/.osc/_osclib_version b/tests/addfile_fixtures/osctest/simple/.osc/_osclib_version new file mode 100644 index 00000000..d3827e75 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/.osc/_osclib_version @@ -0,0 +1 @@ +1.0 diff --git a/tests/addfile_fixtures/osctest/simple/.osc/_package b/tests/addfile_fixtures/osctest/simple/.osc/_package new file mode 100644 index 00000000..8fd32466 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/.osc/_package @@ -0,0 +1 @@ +simple \ No newline at end of file diff --git a/tests/addfile_fixtures/osctest/simple/.osc/_project b/tests/addfile_fixtures/osctest/simple/.osc/_project new file mode 100644 index 00000000..cea3bc84 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/.osc/_project @@ -0,0 +1 @@ +osctest \ No newline at end of file diff --git a/tests/addfile_fixtures/osctest/simple/.osc/_to_be_deleted b/tests/addfile_fixtures/osctest/simple/.osc/_to_be_deleted new file mode 100644 index 00000000..257cc564 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/.osc/_to_be_deleted @@ -0,0 +1 @@ +foo diff --git a/tests/addfile_fixtures/osctest/simple/.osc/foo b/tests/addfile_fixtures/osctest/simple/.osc/foo new file mode 100644 index 00000000..3bb34cf8 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/.osc/foo @@ -0,0 +1 @@ +This is a simple test. diff --git a/tests/addfile_fixtures/osctest/simple/.osc/merge b/tests/addfile_fixtures/osctest/simple/.osc/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/.osc/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/addfile_fixtures/osctest/simple/.osc/nochange b/tests/addfile_fixtures/osctest/simple/.osc/nochange new file mode 100644 index 00000000..0569b03f --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/.osc/nochange @@ -0,0 +1 @@ +This file didn't change. diff --git a/tests/addfile_fixtures/osctest/simple/merge b/tests/addfile_fixtures/osctest/simple/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/addfile_fixtures/osctest/simple/nochange b/tests/addfile_fixtures/osctest/simple/nochange new file mode 100644 index 00000000..3a48a293 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/nochange @@ -0,0 +1,2 @@ +This file didn't change but +is modified. diff --git a/tests/addfile_fixtures/osctest/simple/toadd1 b/tests/addfile_fixtures/osctest/simple/toadd1 new file mode 100644 index 00000000..15924238 --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/toadd1 @@ -0,0 +1 @@ +toadd1 diff --git a/tests/addfile_fixtures/osctest/simple/toadd2 b/tests/addfile_fixtures/osctest/simple/toadd2 new file mode 100644 index 00000000..6f1ab97c --- /dev/null +++ b/tests/addfile_fixtures/osctest/simple/toadd2 @@ -0,0 +1 @@ +toadd2 diff --git a/tests/common.py b/tests/common.py index a950c816..9baedca2 100644 --- a/tests/common.py +++ b/tests/common.py @@ -85,3 +85,11 @@ class OscTestCase(unittest.TestCase): def _change_to_pkg(self, name): os.chdir(os.path.join(self.tmpdir, 'osctest', name)) + + def _check_list(self, fname, exp): + fname = os.path.join('.osc', fname) + self.assertTrue(os.path.exists(fname)) + self.assertEqual(open(fname, 'r').read(), exp) + + def _check_status(self, p, fname, exp): + self.assertEqual(p.status(fname), exp) diff --git a/tests/deletefile_fixtures/oscrc b/tests/deletefile_fixtures/oscrc new file mode 100644 index 00000000..04b2b0ab --- /dev/null +++ b/tests/deletefile_fixtures/oscrc @@ -0,0 +1,104 @@ +[general] +# URL to access API server, e.g. https://api.opensuse.org +# you also need a section [https://api.opensuse.org] with the credentials +apiurl = http://localhost +# Downloaded packages are cached here. Must be writable by you. +#packagecachedir = /var/tmp/osbuild-packagecache +# Wrapper to call build as root (sudo, su -, ...) +#su-wrapper = su -c +# rootdir to setup the chroot environment +# can contain %(repo)s, %(arch)s, %(project)s and %(package)s for replacement, e.g. +# /srv/oscbuild/%(repo)s-%(arch)s or +# /srv/oscbuild/%(repo)s-%(arch)s-%(project)s-%(package)s +#build-root = /var/tmp/build-root +# compile with N jobs (default: "getconf _NPROCESSORS_ONLN") +#build-jobs = N +# build-type to use - values can be (depending on the capabilities of the 'build' script) +# empty - chroot build +# kvm - kvm VM build (needs build-device, build-swap, build-memory) +# xen - xen VM build (needs build-device, build-swap, build-memory) +# experimental: +# qemu - qemu VM build +# lxc - lxc build +#build-type = +# build-device is the disk-image file to use as root for VM builds +# e.g. /var/tmp/FILE.root +#build-device = /var/tmp/FILE.root +# build-swap is the disk-image to use as swap for VM builds +# e.g. /var/tmp/FILE.swap +#build-swap = /var/tmp/FILE.swap +# build-memory is the amount of memory used in the VM +# value in MB - e.g. 512 +#build-memory = 512 +# build-vmdisk-rootsize is the size of the disk-image used as root in a VM build +# values in MB - e.g. 4096 +#build-vmdisk-rootsize = 4096 +# build-vmdisk-swapsize is the size of the disk-image used as swap in a VM build +# values in MB - e.g. 1024 +#build-vmdisk-swapsize = 1024 +# Numeric uid:gid to assign to the "abuild" user in the build-root +# or "caller" to use the current users uid:gid +# This is convenient when sharing the buildroot with ordinary userids +# on the host. +# This should not be 0 +# build-uid = +# extra packages to install when building packages locally (osc build) +# this corresponds to osc build's -x option and can be overridden with that +# -x '' can also be given on the command line to override this setting, or +# you can have an empty setting here. +#extra-pkgs = vim gdb strace +# build platform is used if the platform argument is omitted to osc build +#build_repository = openSUSE_Factory +# default project for getpac or bco +#getpac_default_project = openSUSE:Factory +# alternate filesystem layout: have multiple subdirs, where colons were. +#checkout_no_colon = 0 +# local files to ignore with status, addremove, .... +#exclude_glob = .osc CVS .svn .* _linkerror *~ #*# *.orig *.bak *.changes.* +# keep passwords in plaintext. If you see this comment, your osc +# already uses the encrypted password, and only keeps them in plain text +# for backwards compatibility. Default will change to 0 in future releases. +# You can remove the plaintext password without harm, if you do not need +# backwards compatibility. +#plaintext_passwd = 1 +# limit the age of requests shown with 'osc req list'. +# this is a default only, can be overridden by 'osc req list -D NNN' +# Use 0 for unlimted. +#request_list_days = 0 +# show info useful for debugging +#debug = 1 +# show HTTP traffic useful for debugging +#http_debug = 1 +# Skip signature verification of packages used for build. +#no_verify = 1 +# jump into the debugger in case of errors +#post_mortem = 1 +# print call traces in case of errors +#traceback = 1 +# use KDE/Gnome/MacOS/Windows keyring for credentials if available +#use_keyring = 1 +# check for unversioned/removed files before commit +#check_filelist = 1 +# check for pending requests after executing an action (e.g. checkout, update, commit) +#check_for_request_on_action = 0 +# what to do with the source package if the submitrequest has been accepted. If +# nothing is specified the API default is used +#submitrequest_on_accept_action = cleanup|update|noupdate +#review requests interactively (default: off) +#request_show_review = 1 +# Directory with executables to validate sources, esp before committing +#source_validator_directory = /usr/lib/osc/source_validators + +[http://localhost] +user = Admin +pass = opensuse +passx = QlpoOTFBWSZTWeTSblkAAAGBgAIBygAgADDACGNEHxaYXckU4UJDk0m5ZA== +# set aliases for this apiurl +# aliases = foo, bar +# email used in .changes, unless the one from osc meta prj will be used +# email = +# additional headers to pass to a request, e.g. for special authentication +#http_headers = Host: foofoobar, +# User: mumblegack +# Force using of keyring for this API +#keyring = 1 diff --git a/tests/deletefile_fixtures/osctest/.osc/_apiurl b/tests/deletefile_fixtures/osctest/.osc/_apiurl new file mode 100644 index 00000000..0afeace7 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/.osc/_apiurl @@ -0,0 +1 @@ +http://localhost diff --git a/tests/deletefile_fixtures/osctest/.osc/_packages b/tests/deletefile_fixtures/osctest/.osc/_packages new file mode 100644 index 00000000..04e56f00 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/.osc/_packages @@ -0,0 +1 @@ + diff --git a/tests/deletefile_fixtures/osctest/.osc/_project b/tests/deletefile_fixtures/osctest/.osc/_project new file mode 100644 index 00000000..b83ffd3c --- /dev/null +++ b/tests/deletefile_fixtures/osctest/.osc/_project @@ -0,0 +1 @@ +osctest diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/_apiurl b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_apiurl new file mode 100644 index 00000000..0afeace7 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_apiurl @@ -0,0 +1 @@ +http://localhost diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/_files b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_files new file mode 100644 index 00000000..f0dac1f4 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_files @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/_osclib_version b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_osclib_version new file mode 100644 index 00000000..d3827e75 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_osclib_version @@ -0,0 +1 @@ +1.0 diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/_package b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_package new file mode 100644 index 00000000..8fd32466 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_package @@ -0,0 +1 @@ +simple \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/_project b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_project new file mode 100644 index 00000000..cea3bc84 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_project @@ -0,0 +1 @@ +osctest \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/_to_be_added b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_to_be_added new file mode 100644 index 00000000..15924238 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_to_be_added @@ -0,0 +1 @@ +toadd1 diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/_to_be_deleted b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_to_be_deleted new file mode 100644 index 00000000..257cc564 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/_to_be_deleted @@ -0,0 +1 @@ +foo diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/foo b/tests/deletefile_fixtures/osctest/already_deleted/.osc/foo new file mode 100644 index 00000000..3bb34cf8 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/foo @@ -0,0 +1 @@ +This is a simple test. diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/merge b/tests/deletefile_fixtures/osctest/already_deleted/.osc/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/deletefile_fixtures/osctest/already_deleted/.osc/nochange b/tests/deletefile_fixtures/osctest/already_deleted/.osc/nochange new file mode 100644 index 00000000..0569b03f --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/.osc/nochange @@ -0,0 +1 @@ +This file didn't change. diff --git a/tests/deletefile_fixtures/osctest/already_deleted/merge b/tests/deletefile_fixtures/osctest/already_deleted/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/deletefile_fixtures/osctest/already_deleted/nochange b/tests/deletefile_fixtures/osctest/already_deleted/nochange new file mode 100644 index 00000000..3a48a293 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/nochange @@ -0,0 +1,2 @@ +This file didn't change but +is modified. diff --git a/tests/deletefile_fixtures/osctest/already_deleted/toadd1 b/tests/deletefile_fixtures/osctest/already_deleted/toadd1 new file mode 100644 index 00000000..15924238 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/toadd1 @@ -0,0 +1 @@ +toadd1 diff --git a/tests/deletefile_fixtures/osctest/already_deleted/toadd2 b/tests/deletefile_fixtures/osctest/already_deleted/toadd2 new file mode 100644 index 00000000..6f1ab97c --- /dev/null +++ b/tests/deletefile_fixtures/osctest/already_deleted/toadd2 @@ -0,0 +1 @@ +toadd2 diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/_apiurl b/tests/deletefile_fixtures/osctest/conflict/.osc/_apiurl new file mode 100644 index 00000000..0afeace7 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/_apiurl @@ -0,0 +1 @@ +http://localhost diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/_files b/tests/deletefile_fixtures/osctest/conflict/.osc/_files new file mode 100644 index 00000000..6fc0c344 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/_files @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/_in_conflict b/tests/deletefile_fixtures/osctest/conflict/.osc/_in_conflict new file mode 100644 index 00000000..257cc564 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/_in_conflict @@ -0,0 +1 @@ +foo diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/_osclib_version b/tests/deletefile_fixtures/osctest/conflict/.osc/_osclib_version new file mode 100644 index 00000000..d3827e75 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/_osclib_version @@ -0,0 +1 @@ +1.0 diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/_package b/tests/deletefile_fixtures/osctest/conflict/.osc/_package new file mode 100644 index 00000000..8fd32466 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/_package @@ -0,0 +1 @@ +simple \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/_project b/tests/deletefile_fixtures/osctest/conflict/.osc/_project new file mode 100644 index 00000000..cea3bc84 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/_project @@ -0,0 +1 @@ +osctest \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/_to_be_added b/tests/deletefile_fixtures/osctest/conflict/.osc/_to_be_added new file mode 100644 index 00000000..15924238 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/_to_be_added @@ -0,0 +1 @@ +toadd1 diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/foo b/tests/deletefile_fixtures/osctest/conflict/.osc/foo new file mode 100644 index 00000000..3bb34cf8 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/foo @@ -0,0 +1 @@ +This is a simple test. diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/merge b/tests/deletefile_fixtures/osctest/conflict/.osc/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/deletefile_fixtures/osctest/conflict/.osc/nochange b/tests/deletefile_fixtures/osctest/conflict/.osc/nochange new file mode 100644 index 00000000..0569b03f --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/.osc/nochange @@ -0,0 +1 @@ +This file didn't change. diff --git a/tests/deletefile_fixtures/osctest/conflict/foo b/tests/deletefile_fixtures/osctest/conflict/foo new file mode 100644 index 00000000..ad9621d7 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/foo @@ -0,0 +1,5 @@ +<<<<<<< foo.mine +This is no test. +======= +This is a simple test. +>>>>>>> foo.r2 diff --git a/tests/deletefile_fixtures/osctest/conflict/foo.mine b/tests/deletefile_fixtures/osctest/conflict/foo.mine new file mode 100644 index 00000000..3543613c --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/foo.mine @@ -0,0 +1 @@ +This is no test. diff --git a/tests/deletefile_fixtures/osctest/conflict/foo.r2 b/tests/deletefile_fixtures/osctest/conflict/foo.r2 new file mode 100644 index 00000000..3bb34cf8 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/foo.r2 @@ -0,0 +1 @@ +This is a simple test. diff --git a/tests/deletefile_fixtures/osctest/conflict/merge b/tests/deletefile_fixtures/osctest/conflict/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/deletefile_fixtures/osctest/conflict/nochange b/tests/deletefile_fixtures/osctest/conflict/nochange new file mode 100644 index 00000000..3a48a293 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/nochange @@ -0,0 +1,2 @@ +This file didn't change but +is modified. diff --git a/tests/deletefile_fixtures/osctest/conflict/toadd1 b/tests/deletefile_fixtures/osctest/conflict/toadd1 new file mode 100644 index 00000000..15924238 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/toadd1 @@ -0,0 +1 @@ +toadd1 diff --git a/tests/deletefile_fixtures/osctest/conflict/toadd2 b/tests/deletefile_fixtures/osctest/conflict/toadd2 new file mode 100644 index 00000000..6f1ab97c --- /dev/null +++ b/tests/deletefile_fixtures/osctest/conflict/toadd2 @@ -0,0 +1 @@ +toadd2 diff --git a/tests/deletefile_fixtures/osctest/delete/.osc/_apiurl b/tests/deletefile_fixtures/osctest/delete/.osc/_apiurl new file mode 100644 index 00000000..0afeace7 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/.osc/_apiurl @@ -0,0 +1 @@ +http://localhost diff --git a/tests/deletefile_fixtures/osctest/delete/.osc/_files b/tests/deletefile_fixtures/osctest/delete/.osc/_files new file mode 100644 index 00000000..f0dac1f4 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/.osc/_files @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/delete/.osc/_osclib_version b/tests/deletefile_fixtures/osctest/delete/.osc/_osclib_version new file mode 100644 index 00000000..d3827e75 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/.osc/_osclib_version @@ -0,0 +1 @@ +1.0 diff --git a/tests/deletefile_fixtures/osctest/delete/.osc/_package b/tests/deletefile_fixtures/osctest/delete/.osc/_package new file mode 100644 index 00000000..8fd32466 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/.osc/_package @@ -0,0 +1 @@ +simple \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/delete/.osc/_project b/tests/deletefile_fixtures/osctest/delete/.osc/_project new file mode 100644 index 00000000..cea3bc84 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/.osc/_project @@ -0,0 +1 @@ +osctest \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/delete/.osc/_to_be_deleted b/tests/deletefile_fixtures/osctest/delete/.osc/_to_be_deleted new file mode 100644 index 00000000..257cc564 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/.osc/_to_be_deleted @@ -0,0 +1 @@ +foo diff --git a/tests/deletefile_fixtures/osctest/delete/.osc/foo b/tests/deletefile_fixtures/osctest/delete/.osc/foo new file mode 100644 index 00000000..3bb34cf8 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/.osc/foo @@ -0,0 +1 @@ +This is a simple test. diff --git a/tests/deletefile_fixtures/osctest/delete/.osc/merge b/tests/deletefile_fixtures/osctest/delete/.osc/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/.osc/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/deletefile_fixtures/osctest/delete/.osc/nochange b/tests/deletefile_fixtures/osctest/delete/.osc/nochange new file mode 100644 index 00000000..0569b03f --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/.osc/nochange @@ -0,0 +1 @@ +This file didn't change. diff --git a/tests/deletefile_fixtures/osctest/delete/merge b/tests/deletefile_fixtures/osctest/delete/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/deletefile_fixtures/osctest/delete/nochange b/tests/deletefile_fixtures/osctest/delete/nochange new file mode 100644 index 00000000..3a48a293 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/nochange @@ -0,0 +1,2 @@ +This file didn't change but +is modified. diff --git a/tests/deletefile_fixtures/osctest/delete/toadd1 b/tests/deletefile_fixtures/osctest/delete/toadd1 new file mode 100644 index 00000000..15924238 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/toadd1 @@ -0,0 +1 @@ +toadd1 diff --git a/tests/deletefile_fixtures/osctest/delete/toadd2 b/tests/deletefile_fixtures/osctest/delete/toadd2 new file mode 100644 index 00000000..6f1ab97c --- /dev/null +++ b/tests/deletefile_fixtures/osctest/delete/toadd2 @@ -0,0 +1 @@ +toadd2 diff --git a/tests/deletefile_fixtures/osctest/replace/.osc/_apiurl b/tests/deletefile_fixtures/osctest/replace/.osc/_apiurl new file mode 100644 index 00000000..0afeace7 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/.osc/_apiurl @@ -0,0 +1 @@ +http://localhost diff --git a/tests/deletefile_fixtures/osctest/replace/.osc/_files b/tests/deletefile_fixtures/osctest/replace/.osc/_files new file mode 100644 index 00000000..f0dac1f4 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/.osc/_files @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/replace/.osc/_osclib_version b/tests/deletefile_fixtures/osctest/replace/.osc/_osclib_version new file mode 100644 index 00000000..d3827e75 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/.osc/_osclib_version @@ -0,0 +1 @@ +1.0 diff --git a/tests/deletefile_fixtures/osctest/replace/.osc/_package b/tests/deletefile_fixtures/osctest/replace/.osc/_package new file mode 100644 index 00000000..8fd32466 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/.osc/_package @@ -0,0 +1 @@ +simple \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/replace/.osc/_project b/tests/deletefile_fixtures/osctest/replace/.osc/_project new file mode 100644 index 00000000..cea3bc84 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/.osc/_project @@ -0,0 +1 @@ +osctest \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/replace/.osc/_to_be_added b/tests/deletefile_fixtures/osctest/replace/.osc/_to_be_added new file mode 100644 index 00000000..d530a9a0 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/.osc/_to_be_added @@ -0,0 +1,2 @@ +toadd1 +merge diff --git a/tests/deletefile_fixtures/osctest/replace/.osc/foo b/tests/deletefile_fixtures/osctest/replace/.osc/foo new file mode 100644 index 00000000..3bb34cf8 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/.osc/foo @@ -0,0 +1 @@ +This is a simple test. diff --git a/tests/deletefile_fixtures/osctest/replace/.osc/merge b/tests/deletefile_fixtures/osctest/replace/.osc/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/.osc/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/deletefile_fixtures/osctest/replace/.osc/nochange b/tests/deletefile_fixtures/osctest/replace/.osc/nochange new file mode 100644 index 00000000..0569b03f --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/.osc/nochange @@ -0,0 +1 @@ +This file didn't change. diff --git a/tests/deletefile_fixtures/osctest/replace/foo b/tests/deletefile_fixtures/osctest/replace/foo new file mode 100644 index 00000000..3bb34cf8 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/foo @@ -0,0 +1 @@ +This is a simple test. diff --git a/tests/deletefile_fixtures/osctest/replace/merge b/tests/deletefile_fixtures/osctest/replace/merge new file mode 100644 index 00000000..feae347d --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/merge @@ -0,0 +1 @@ +replaced diff --git a/tests/deletefile_fixtures/osctest/replace/nochange b/tests/deletefile_fixtures/osctest/replace/nochange new file mode 100644 index 00000000..3a48a293 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/nochange @@ -0,0 +1,2 @@ +This file didn't change but +is modified. diff --git a/tests/deletefile_fixtures/osctest/replace/toadd1 b/tests/deletefile_fixtures/osctest/replace/toadd1 new file mode 100644 index 00000000..15924238 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/toadd1 @@ -0,0 +1 @@ +toadd1 diff --git a/tests/deletefile_fixtures/osctest/replace/toadd2 b/tests/deletefile_fixtures/osctest/replace/toadd2 new file mode 100644 index 00000000..6f1ab97c --- /dev/null +++ b/tests/deletefile_fixtures/osctest/replace/toadd2 @@ -0,0 +1 @@ +toadd2 diff --git a/tests/deletefile_fixtures/osctest/simple/.osc/_apiurl b/tests/deletefile_fixtures/osctest/simple/.osc/_apiurl new file mode 100644 index 00000000..0afeace7 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/.osc/_apiurl @@ -0,0 +1 @@ +http://localhost diff --git a/tests/deletefile_fixtures/osctest/simple/.osc/_files b/tests/deletefile_fixtures/osctest/simple/.osc/_files new file mode 100644 index 00000000..f0dac1f4 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/.osc/_files @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/simple/.osc/_osclib_version b/tests/deletefile_fixtures/osctest/simple/.osc/_osclib_version new file mode 100644 index 00000000..d3827e75 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/.osc/_osclib_version @@ -0,0 +1 @@ +1.0 diff --git a/tests/deletefile_fixtures/osctest/simple/.osc/_package b/tests/deletefile_fixtures/osctest/simple/.osc/_package new file mode 100644 index 00000000..8fd32466 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/.osc/_package @@ -0,0 +1 @@ +simple \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/simple/.osc/_project b/tests/deletefile_fixtures/osctest/simple/.osc/_project new file mode 100644 index 00000000..cea3bc84 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/.osc/_project @@ -0,0 +1 @@ +osctest \ No newline at end of file diff --git a/tests/deletefile_fixtures/osctest/simple/.osc/_to_be_added b/tests/deletefile_fixtures/osctest/simple/.osc/_to_be_added new file mode 100644 index 00000000..15924238 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/.osc/_to_be_added @@ -0,0 +1 @@ +toadd1 diff --git a/tests/deletefile_fixtures/osctest/simple/.osc/foo b/tests/deletefile_fixtures/osctest/simple/.osc/foo new file mode 100644 index 00000000..3bb34cf8 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/.osc/foo @@ -0,0 +1 @@ +This is a simple test. diff --git a/tests/deletefile_fixtures/osctest/simple/.osc/merge b/tests/deletefile_fixtures/osctest/simple/.osc/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/.osc/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/deletefile_fixtures/osctest/simple/.osc/nochange b/tests/deletefile_fixtures/osctest/simple/.osc/nochange new file mode 100644 index 00000000..0569b03f --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/.osc/nochange @@ -0,0 +1 @@ +This file didn't change. diff --git a/tests/deletefile_fixtures/osctest/simple/foo b/tests/deletefile_fixtures/osctest/simple/foo new file mode 100644 index 00000000..3bb34cf8 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/foo @@ -0,0 +1 @@ +This is a simple test. diff --git a/tests/deletefile_fixtures/osctest/simple/merge b/tests/deletefile_fixtures/osctest/simple/merge new file mode 100644 index 00000000..0b4685d5 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/merge @@ -0,0 +1,4 @@ +Is it +possible to +merge this file? +I hope so... diff --git a/tests/deletefile_fixtures/osctest/simple/nochange b/tests/deletefile_fixtures/osctest/simple/nochange new file mode 100644 index 00000000..3a48a293 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/nochange @@ -0,0 +1,2 @@ +This file didn't change but +is modified. diff --git a/tests/deletefile_fixtures/osctest/simple/toadd1 b/tests/deletefile_fixtures/osctest/simple/toadd1 new file mode 100644 index 00000000..15924238 --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/toadd1 @@ -0,0 +1 @@ +toadd1 diff --git a/tests/deletefile_fixtures/osctest/simple/toadd2 b/tests/deletefile_fixtures/osctest/simple/toadd2 new file mode 100644 index 00000000..6f1ab97c --- /dev/null +++ b/tests/deletefile_fixtures/osctest/simple/toadd2 @@ -0,0 +1 @@ +toadd2 diff --git a/tests/test_addfiles.py b/tests/test_addfiles.py new file mode 100644 index 00000000..9fb21834 --- /dev/null +++ b/tests/test_addfiles.py @@ -0,0 +1,84 @@ +import osc.core +import osc.oscerr +import os +import sys +from common import GET, OscTestCase + +FIXTURES_DIR = os.path.join(os.getcwd(), 'addfile_fixtures') + +class TestAddFiles(OscTestCase): + def _get_fixtures_dir(self): + return FIXTURES_DIR + + def testSimpleAdd(self): + """add one file ('toadd1') to the wc""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + p.addfile('toadd1') + exp = 'A toadd1\n' + self.assertEqual(sys.stdout.getvalue(), exp) + self.assertFalse(os.path.exists(os.path.join('.osc', 'toadd1'))) + self._check_status(p, 'toadd1', 'A') + self.__check_addlist('toadd1\n') + + def testSimpleMultipleAdd(self): + """add multiple files ('toadd1', 'toadd2') to the wc""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + p.addfile('toadd1') + p.addfile('toadd2') + exp = 'A toadd1\nA toadd2\n' + self.assertEqual(sys.stdout.getvalue(), exp) + self.assertFalse(os.path.exists(os.path.join('.osc', 'toadd1'))) + self.assertFalse(os.path.exists(os.path.join('.osc', 'toadd2'))) + self._check_status(p, 'toadd1', 'A') + self._check_status(p, 'toadd2', 'A') + self.__check_addlist('toadd1\ntoadd2\n') + + def testAddVersionedFile(self): + """add a versioned file""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + self.assertRaises(osc.oscerr.PackageFileConflict, p.addfile, 'merge') + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_added'))) + self._check_status(p, 'merge', ' ') + + def testAddUnversionedFileTwice(self): + """add the same file twice""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + p.addfile('toadd1') + self.assertRaises(osc.oscerr.PackageFileConflict, p.addfile, 'toadd1') + exp = 'A toadd1\n' + self.assertEqual(sys.stdout.getvalue(), exp) + self.assertFalse(os.path.exists(os.path.join('.osc', 'toadd1'))) + self._check_status(p, 'toadd1', 'A') + self.__check_addlist('toadd1\n') + + def testReplace(self): + """replace a deleted file ('foo')""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + open('foo', 'w').write('replaced file\n') + p.addfile('foo') + exp = 'A foo\n' + self.assertEqual(sys.stdout.getvalue(), exp) + self.assertTrue(os.path.exists(os.path.join('.osc', 'foo'))) + self.assertNotEqual(open(os.path.join('.osc', 'foo'), 'r').read(), 'replaced file\n') + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_deleted'))) + self._check_status(p, 'foo', 'R') + self.__check_addlist('foo\n') + + def testAddNonExistentFile(self): + """add a non existent file""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + self.assertRaises(IOError, p.addfile, 'doesnotexist') + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_added'))) + + def __check_addlist(self, exp): + self._check_list('_to_be_added', exp) + +if __name__ == '__main__': + import unittest + unittest.main() diff --git a/tests/test_deletefiles.py b/tests/test_deletefiles.py new file mode 100644 index 00000000..fcbba928 --- /dev/null +++ b/tests/test_deletefiles.py @@ -0,0 +1,171 @@ +import osc.core +import osc.oscerr +import os +import sys +from common import GET, OscTestCase + +FIXTURES_DIR = os.path.join(os.getcwd(), 'deletefile_fixtures') + +class TestAddFiles(OscTestCase): + def _get_fixtures_dir(self): + return FIXTURES_DIR + + def testSimpleRemove(self): + """delete a file ('foo') from the wc""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + ret = p.delete_file('foo') + self.__check_ret(ret, True, ' ') + self.assertFalse(os.path.exists('foo')) + self.assertTrue(os.path.exists(os.path.join('.osc', 'foo'))) + self.__check_deletelist('foo\n') + self._check_status(p, 'foo', 'D') + + def testDeleteModified(self): + """delete modified file ('nochange') from the wc (without force)""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + ret = p.delete_file('nochange') + self.__check_ret(ret, False, 'M') + self.assertTrue(os.path.exists('nochange')) + self.assertTrue(os.path.exists(os.path.join('.osc', 'nochange'))) + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_deleted'))) + self._check_status(p, 'nochange', 'M') + + def testDeleteUnversioned(self): + """delete an unversioned file ('toadd2') from the wc""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + ret = p.delete_file('toadd2') + self.__check_ret(ret, False, '?') + self.assertTrue(os.path.exists('toadd2')) + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_deleted'))) + self._check_status(p, 'toadd2', '?') + + def testDeleteAdded(self): + """delete an added file ('toadd1') from the wc (without force)""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + ret = p.delete_file('toadd1') + self.__check_ret(ret, False, 'A') + self.assertTrue(os.path.exists('toadd1')) + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_deleted'))) + self._check_status(p, 'toadd1', 'A') + + def testDeleteReplaced(self): + """delete an added file ('merge') from the wc (without force)""" + self._change_to_pkg('replace') + p = osc.core.Package('.') + ret = p.delete_file('merge') + self.__check_ret(ret, False, 'R') + self.assertTrue(os.path.exists('merge')) + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_deleted'))) + self._check_list('_to_be_added', 'toadd1\nmerge\n') + self._check_status(p, 'merge', 'R') + + def testDeleteConflict(self): + """delete a file ('foo', state='C') from the wc (without force)""" + self._change_to_pkg('conflict') + p = osc.core.Package('.') + ret = p.delete_file('foo') + self.__check_ret(ret, False, 'C') + self.assertTrue(os.path.exists('foo')) + self.assertTrue(os.path.exists(os.path.join('.osc', 'foo'))) + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_deleted'))) + self.assertTrue(os.path.exists(os.path.join('.osc', '_in_conflict'))) + self._check_status(p, 'foo', 'C') + + def testDeleteModifiedForce(self): + """force deletion modified file ('nochange') from wc""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + ret = p.delete_file('nochange', force=True) + self.__check_ret(ret, True, 'M') + self.assertFalse(os.path.exists('nochange')) + self.assertTrue(os.path.exists(os.path.join('.osc', 'nochange'))) + self.__check_deletelist('nochange\n') + self._check_status(p, 'nochange', 'D') + + def testDeleteUnversionedForce(self): + """delete an unversioned file ('toadd2') from the wc (with force)""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + ret = p.delete_file('toadd2', force=True) + self.__check_ret(ret, True, '?') + self.assertFalse(os.path.exists('toadd2')) + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_deleted'))) + self.assertRaises(IOError, p.status, 'toadd2') + + def testDeleteAddedForce(self): + """delete an added file ('toadd1') from the wc (with force)""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + ret = p.delete_file('toadd1', force=True) + self.__check_ret(ret, True, 'A') + self.assertFalse(os.path.exists('toadd1')) + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_deleted'))) + self.assertFalse(os.path.exists(os.path.join('.osc', '_to_be_added'))) + self.assertRaises(IOError, p.status, 'toadd1') + + def testDeleteReplacedForce(self): + """delete an added file ('merge') from the wc (with force)""" + self._change_to_pkg('replace') + p = osc.core.Package('.') + ret = p.delete_file('merge', force=True) + self.__check_ret(ret, True, 'R') + self.assertFalse(os.path.exists('merge')) + self.assertTrue(os.path.exists(os.path.join('.osc', 'merge'))) + self.__check_deletelist('merge\n') + self._check_list('_to_be_added', 'toadd1\n') + self._check_status(p, 'merge', 'D') + + def testDeleteConflictForce(self): + """delete a file ('foo', state='C') from the wc (with force)""" + self._change_to_pkg('conflict') + p = osc.core.Package('.') + ret = p.delete_file('foo', force=True) + self.__check_ret(ret, True, 'C') + self.assertFalse(os.path.exists('foo')) + self.assertTrue(os.path.exists('foo.r2')) + self.assertTrue(os.path.exists('foo.mine')) + self.assertTrue(os.path.exists(os.path.join('.osc', 'foo'))) + self.__check_deletelist('foo\n') + self.assertFalse(os.path.exists(os.path.join('.osc', '_in_conflict'))) + self._check_status(p, 'foo', 'D') + + def testDeleteMultiple(self): + """delete mutliple files from the wc""" + self._change_to_pkg('simple') + p = osc.core.Package('.') + ret = p.delete_file('foo') + self.__check_ret(ret, True, ' ') + ret = p.delete_file('merge') + self.__check_ret(ret, True, ' ') + self.assertFalse(os.path.exists('foo')) + self.assertFalse(os.path.exists('merge')) + self.assertTrue(os.path.exists(os.path.join('.osc', 'foo'))) + self.assertTrue(os.path.exists(os.path.join('.osc', 'merge'))) + self.__check_deletelist('foo\nmerge\n') + + def testDeleteAlreadyDeleted(self): + """delete already deleted file from the wc""" + self._change_to_pkg('already_deleted') + p = osc.core.Package('.') + ret = p.delete_file('foo') + self.__check_ret(ret, True, 'D') + self.assertFalse(os.path.exists('foo')) + self.assertTrue(os.path.exists(os.path.join('.osc', 'foo'))) + self.__check_deletelist('foo\n') + self._check_status(p, 'foo', 'D') + + def __check_ret(self, ret, exp1, exp2): + self.assertTrue(len(ret) == 2) + self.assertTrue(ret[0] == exp1) + self.assertTrue(ret[1] == exp2) + + def __check_deletelist(self, exp): + self._check_list('_to_be_deleted', exp) + +if __name__ == '__main__': + import unittest + unittest.main()