def _handle_file(self, src, profile): """ generate the file content from template """ filetype = utils.run(['file', '-b', src], raw=False) istext = 'text' in filetype if not istext: return self._handle_bin_file(src, profile) return self._handle_text_file(src, profile)
def _handle_file(self, src, profile): """generate the file content from template""" filetype = utils.run(['file', '-b', src], raw=False).strip() self.log.dbg('\"{}\" filetype: {}'.format(src, filetype)) istext = 'text' in filetype self.log.dbg('\"{}\" is text: {}'.format(src, istext)) if not istext: return self._handle_bin_file(src, profile) return self._handle_text_file(src, profile)
def _handle_file(self, src): """generate the file content from template""" _, filetype = utils.run(['file', '-b', src], raw=False, debug=self.debug) filetype = filetype.strip() if self.debug: self.log.dbg('filetype \"{}\": {}'.format(src, filetype)) istext = self._is_text(filetype) if self.debug: self.log.dbg('is text \"{}\": {}'.format(src, istext)) if not istext: return self._handle_bin_file(src) return self._handle_text_file(src)
def _handle_file(self, src): """generate the file content from template""" try: # pylint: disable=C0415 import magic filetype = magic.from_file(src, mime=True) self.log.dbg('using \"magic\" for filetype identification') except ImportError: # fallback _, filetype = utils.run(['file', '-b', '--mime-type', src], debug=self.debug) self.log.dbg('using \"file\" for filetype identification') filetype = filetype.strip() istext = self._is_text(filetype) self.log.dbg('filetype \"{}\": {}'.format(src, filetype)) self.log.dbg('is text \"{}\": {}'.format(src, istext)) if not istext: return self._handle_bin_file(src) return self._handle_text_file(src)
def cmd_importer(o): """import dotfile(s) from paths""" ret = True cnt = 0 paths = o.import_path for path in paths: if o.debug: LOG.dbg('trying to import {}'.format(path)) if not os.path.exists(path): LOG.err('\"{}\" does not exist, ignored!'.format(path)) ret = False continue dst = path.rstrip(os.sep) dst = os.path.abspath(dst) src = strip_home(dst) strip = '.' + os.sep if o.keepdot: strip = os.sep src = src.lstrip(strip) # create a new dotfile dotfile = Dotfile('', dst, src) linktype = LinkTypes(o.link) if o.debug: LOG.dbg('new dotfile: {}'.format(dotfile)) # prepare hierarchy for dotfile srcf = os.path.join(o.dotpath, src) if not os.path.exists(srcf): cmd = ['mkdir', '-p', '{}'.format(os.path.dirname(srcf))] if o.dry: LOG.dry('would run: {}'.format(' '.join(cmd))) else: r, _ = run(cmd, raw=False, debug=o.debug, checkerr=True) if not r: LOG.err('importing \"{}\" failed!'.format(path)) ret = False continue cmd = ['cp', '-R', '-L', dst, srcf] if o.dry: LOG.dry('would run: {}'.format(' '.join(cmd))) if linktype == LinkTypes.PARENTS: LOG.dry('would symlink {} to {}'.format(srcf, dst)) else: r, _ = run(cmd, raw=False, debug=o.debug, checkerr=True) if not r: LOG.err('importing \"{}\" failed!'.format(path)) ret = False continue if linktype == LinkTypes.PARENTS: remove(dst) os.symlink(srcf, dst) retconf, dotfile = o.conf.new(dotfile, o.profile, link=linktype, debug=o.debug) if retconf: LOG.sub('\"{}\" imported'.format(path)) cnt += 1 else: LOG.warn('\"{}\" ignored'.format(path)) if o.dry: LOG.dry('new config file would be:') LOG.raw(o.conf.dump()) else: o.conf.save() LOG.log('\n{} file(s) imported.'.format(cnt)) return ret
def cmd_importer(o): """import dotfile(s) from paths""" ret = True cnt = 0 paths = o.import_path for path in paths: if o.debug: LOG.dbg('trying to import {}'.format(path)) if not os.path.exists(path): LOG.err('\"{}\" does not exist, ignored!'.format(path)) ret = False continue dst = path.rstrip(os.sep) dst = os.path.abspath(dst) src = strip_home(dst) if o.import_as: # handle import as src = os.path.expanduser(o.import_as) src = src.rstrip(os.sep) src = os.path.abspath(src) src = strip_home(src) if o.debug: LOG.dbg('import src for {} as {}'.format(dst, src)) strip = '.' + os.sep if o.keepdot: strip = os.sep src = src.lstrip(strip) # set the link attribute linktype = o.import_link if linktype == LinkTypes.LINK_CHILDREN and \ not os.path.isdir(path): LOG.err('importing \"{}\" failed!'.format(path)) ret = False continue if o.debug: LOG.dbg('import dotfile: src:{} dst:{}'.format(src, dst)) # test no other dotfile exists with same # dst for this profile but different src dfs = o.conf.get_dotfile_by_dst(dst) if dfs: invalid = False for df in dfs: profiles = o.conf.get_profiles_by_dotfile_key(df.key) profiles = [x.key for x in profiles] if o.profile in profiles and \ not o.conf.get_dotfile_by_src_dst(src, dst): # same profile # different src LOG.err('duplicate dotfile for this profile') ret = False invalid = True break if invalid: continue # prepare hierarchy for dotfile srcf = os.path.join(o.dotpath, src) overwrite = not os.path.exists(srcf) if os.path.exists(srcf): overwrite = True if o.safe: c = Comparator(debug=o.debug, diff_cmd=o.diff_command) diff = c.compare(srcf, dst) if diff != '': # files are different, dunno what to do LOG.log('diff \"{}\" VS \"{}\"'.format(dst, srcf)) LOG.emph(diff) # ask user msg = 'Dotfile \"{}\" already exists, overwrite?' overwrite = LOG.ask(msg.format(srcf)) if o.debug: LOG.dbg('will overwrite: {}'.format(overwrite)) if overwrite: cmd = ['mkdir', '-p', '{}'.format(os.path.dirname(srcf))] if o.dry: LOG.dry('would run: {}'.format(' '.join(cmd))) else: r, _ = run(cmd, raw=False, debug=o.debug, checkerr=True) if not r: LOG.err('importing \"{}\" failed!'.format(path)) ret = False continue if o.dry: LOG.dry('would copy {} to {}'.format(dst, srcf)) else: if os.path.isdir(dst): if os.path.exists(srcf): shutil.rmtree(srcf) shutil.copytree(dst, srcf) else: shutil.copy2(dst, srcf) retconf = o.conf.new(src, dst, linktype) if retconf: LOG.sub('\"{}\" imported'.format(path)) cnt += 1 else: LOG.warn('\"{}\" ignored'.format(path)) if o.dry: LOG.dry('new config file would be:') LOG.raw(o.conf.dump()) else: o.conf.save() LOG.log('\n{} file(s) imported.'.format(cnt)) return ret
def cmd_importer(o): """import dotfile(s) from paths""" ret = True cnt = 0 paths = o.import_path for path in paths: if o.debug: LOG.dbg('trying to import {}'.format(path)) if not os.path.exists(path): LOG.err('\"{}\" does not exist, ignored!'.format(path)) ret = False continue dst = path.rstrip(os.sep) dst = os.path.abspath(dst) src = strip_home(dst) strip = '.' + os.sep if o.keepdot: strip = os.sep src = src.lstrip(strip) # set the link attribute linktype = o.import_link if linktype == LinkTypes.LINK_CHILDREN and \ not os.path.isdir(path): LOG.err('importing \"{}\" failed!'.format(path)) ret = False continue if o.debug: LOG.dbg('new dotfile: src:{} dst:{}'.format(src, dst)) # prepare hierarchy for dotfile srcf = os.path.join(o.dotpath, src) overwrite = not os.path.exists(srcf) if os.path.exists(srcf): overwrite = True if o.safe: c = Comparator(debug=o.debug) diff = c.compare(srcf, dst) if diff != '': # files are different, dunno what to do LOG.log('diff \"{}\" VS \"{}\"'.format(dst, srcf)) LOG.emph(diff) # ask user msg = 'Dotfile \"{}\" already exists, overwrite?' overwrite = LOG.ask(msg.format(srcf)) if o.debug: LOG.dbg('will overwrite: {}'.format(overwrite)) if overwrite: cmd = ['mkdir', '-p', '{}'.format(os.path.dirname(srcf))] if o.dry: LOG.dry('would run: {}'.format(' '.join(cmd))) else: r, _ = run(cmd, raw=False, debug=o.debug, checkerr=True) if not r: LOG.err('importing \"{}\" failed!'.format(path)) ret = False continue cmd = ['cp', '-R', '-L', dst, srcf] if o.dry: LOG.dry('would run: {}'.format(' '.join(cmd))) else: r, _ = run(cmd, raw=False, debug=o.debug, checkerr=True) if not r: LOG.err('importing \"{}\" failed!'.format(path)) ret = False continue retconf = o.conf.new(src, dst, linktype, o.profile) if retconf: LOG.sub('\"{}\" imported'.format(path)) cnt += 1 else: LOG.warn('\"{}\" ignored'.format(path)) if o.dry: LOG.dry('new config file would be:') LOG.raw(o.conf.dump()) else: o.conf.save() LOG.log('\n{} file(s) imported.'.format(cnt)) return ret