<commit_before>package main

import (
	"errors"
)

// General interface that all sync providers must implement
type SyncProvider interface {
	// Return the type identifier for this provider
	TypeID() string
}

// Providers implementing this interface provide basic sync capabilities
// These providers require no server-side processing, only simple file access
// but are limited to a direct file-based representation of storage and are less efficent
type BasicSyncProvider interface {
	SyncProvider

	// Upload a given list of files (binary storage). The paths are relative to fromDir and are provided
	// like that to make it easier for the provider since it will likely use the same
	// relative paths inside its own storage
	// For each file, if the remote already has this file and it's the same size, skip.
	// Must only return nil if remote is considered fully up to date with these files
	Upload(remoteName string, filenames []string, fromDir string) error
	// As Upload, except always upload even if already present and override any conditions<commit_msg>Require sync providers to describe themselves in help text<commit_after>package main

import (
	"errors"
)

// General interface that all sync providers must implement
type SyncProvider interface {
	// Return the type identifier for this provider
	TypeID() string

	// Return this provider's help text summary for inclusion in the response to
	// 'git-lob providers' (where all are listed)
	HelpTextSummary() string

	// Return this provider's full help text, including all details of configuration
	// parameters in gitconfig, for use as a response to
	// 'git-lob provider <TypeID>'
	HelpTextDetail() string
}

// Providers implementing this interface provide basic sync capabilities
// These providers require no server-side processing, only simple file access
// but are limited to a direct file-based representation of storage and are less efficent
type BasicSyncProvider interface {
	SyncProvider

	// Upload a given list of files (binary storage). The paths are relative to fromDir and are provided
	// like that to make it easier for the provider since it will likely use the same
	// relative paths inside its own storage
	// For each file, if the remote already has this file and it's the same size, skip.
	// Must only return nil if remote is considered fully up to date with these files
	Upload(remoteName string, filenames []string, fromDir string) error
	// As Upload, except always upload even if already present and override any conditions
{'fraction_non_alphanumeric': 0.05160778086542279, 'fraction_numerical': 0.0, 'mean_word_length': 4.121951219512195, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6563427', 'n_tokens_mistral': 596, 'n_tokens_neox': 585, 'n_words': 352}