code: def diff(self, a_ref, target=None, b_ref=None):
      
      result = {}
      diff_dct = self.scm.get_diff_trees(a_ref, b_ref=b_ref)
      result[DIFF_A_REF] = diff_dct[DIFF_A_REF]
      result[DIFF_B_REF] = diff_dct[DIFF_B_REF]
      if diff_dct[DIFF_EQUAL]:
          result[DIFF_EQUAL] = True
          return result
      result[DIFF_LIST] = []
      diff_outs = _get_diff_outs(self, diff_dct)
      if target is None:
          result[DIFF_LIST] = [
              _diff_royal(self, path, diff_outs[path]) for path in diff_outs
          ]
      elif target in diff_outs:
          result[DIFF_LIST] = [_diff_royal(self, target, diff_outs[target])]
      else:
          msg = "Have not found file/directory '{}' in the commits"
          raise FileNotInCommitError(msg.format(target))
      return result
docs: Gerenates diff message string output
  
      Args:
          target(str) - file/directory to check diff of
          a_ref(str) - first tag
          (optional) b_ref(str) - second git tag
  
      Returns:
          string: string of output message with diff info