code: def rename_section(self, section, new_name):
          
          if not self.has_section(section):
              raise ValueError("Source section '%s' doesn't exist" % section)
          if self.has_section(new_name):
              raise ValueError("Destination section '%s' already exists" % new_name)
  
          super(GitConfigParser, self).add_section(new_name)
          for k, v in self.items(section):
              self.set(new_name, k, self._value_to_string(v))
          # end for each value to copy
  
          # This call writes back the changes, which is why we don't have the respective decorator
          self.remove_section(section)
          return self
docs: rename the given section to new_name
          :raise ValueError: if section doesn't exit
          :raise ValueError: if a section with new_name does already exist
          :return: this instance