Practical Validation Code
Implémentation de validation en Python
Fonction de validation d'URL complète
import re
import subprocess
def validate_git_repository_url(url):
"""
Validate Git repository URL with multiple checks
Args:
url (str): Git repository URL
Returns:
dict: Validation result
"""
## Regex validation patterns
patterns = {
'https': r'^https://.*\.git$',
'ssh': r'^git@.*:.*\.git$',
'git': r'^git://.*\.git$'
}
## Validation result structure
result = {
'is_valid': False,
'protocol': None,
'errors': []
}
## Check URL format
if not url:
result['errors'].append('Empty URL')
return result
## Regex validation
for protocol, pattern in patterns.items():
if re.match(pattern, url):
result['protocol'] = protocol
break
if not result['protocol']:
result['errors'].append('Invalid URL format')
return result
## Network accessibility check
try:
subprocess.run(
['git', 'ls-remote', url],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
timeout=10,
check=True
)
result['is_valid'] = True
except subprocess.CalledProcessError:
result['errors'].append('Repository inaccessible')
except subprocess.TimeoutExpired:
result['errors'].append('Connection timeout')
return result
## Example usage
def main():
test_urls = [
'https://github.com/labex/demo.git',
'[email protected]:labex/example.git',
'invalid-url'
]
for url in test_urls:
validation = validate_git_repository_url(url)
print(f"URL: {url}")
print(f"Valid: {validation['is_valid']}")
print(f"Protocol: {validation['protocol']}")
print(f"Errors: {validation['errors']}\n")
if __name__ == '__main__':
main()
Script de validation en Bash
#!/bin/bash
validate_git_url() {
local url="$1"
## URL validation regex
local https_pattern="^https://.*\.git$"
local ssh_pattern="^git@.*:.*\.git$"
## Check URL format
if [[ $url =~ $https_pattern ]] || [[ $url =~ $ssh_pattern ]]; then
## Attempt to access repository
git ls-remote "$url" &> /dev/null
if [ $? -eq 0 ]; then
echo "Valid repository URL"
return 0
else
echo "Repository inaccessible"
return 1
fi
else
echo "Invalid URL format"
return 1
fi
}
## Example usage
validate_git_url "https://github.com/labex/demo.git"
validate_git_url "invalid-url"
Diagramme de flux de la stratégie de validation
graph TD
A[Git Repository URL] --> B{Regex Validation}
B -->|Valid Format| C{Network Accessibility}
B -->|Invalid Format| D[Reject URL]
C -->|Accessible| E[Validate Success]
C -->|Inaccessible| F[Reject URL]
Considérations pour la validation
Vérification |
Description |
Impact |
Validation par expression régulière |
Vérifier la structure de l'URL |
Évite les URL mal formées |
Vérification réseau |
Tester l'accessibilité du dépôt |
Garantit que les dépôts sont en ligne et accessibles |
Gestion du délai d'attente |
Évite les attentes indéfinies |
Améliore les performances |
En mettant en œuvre ces techniques de validation, les développeurs peuvent gérer de manière robuste les URL de dépôts Git dans différents scénarios et sur différentes plateformes.