Changeset 223752 in webkit


Ignore:
Timestamp:
Oct 20, 2017 2:22:54 AM (7 years ago)
Author:
commit-queue@webkit.org
Message:

[Curl] Clean up old style code in old curl files.
https://bugs.webkit.org/show_bug.cgi?id=178569

Patch by Basuke Suzuki <Basuke Suzuki> on 2017-10-20
Reviewed by Ryosuke Niwa.

Source/WebCore:

  • platform/network/curl/AuthenticationChallenge.h:
  • platform/network/curl/CertificateInfo.h:
  • platform/network/curl/CookieJarCurl.h:
  • platform/network/curl/CurlCacheEntry.h:
  • platform/network/curl/CurlCacheManager.cpp:

(WebCore::CurlCacheManager::singleton):
(WebCore::CurlCacheManager::getInstance): Deleted.

  • platform/network/curl/CurlCacheManager.h:
  • platform/network/curl/CurlContext.cpp:

(WebCore::CurlContext::singleton):

  • platform/network/curl/CurlContext.h:

(WebCore::CurlContext::singleton): Deleted.

  • platform/network/curl/CurlJobManager.cpp:

(WebCore::CurlJobManager::singleton):

  • platform/network/curl/CurlJobManager.h:

(WebCore::CurlJobManager::singleton): Deleted.

  • platform/network/curl/CurlRequest.cpp:

(WebCore::CurlRequest::setupTransfer):

  • platform/network/curl/CurlRequest.h:
  • platform/network/curl/CurlRequestDelegate.h:
  • platform/network/curl/CurlResponse.h:

(WebCore::CurlResponse::isolatedCopy const):

  • platform/network/curl/CurlSSLHandle.h:
  • platform/network/curl/CurlSSLVerifier.h:
  • platform/network/curl/DownloadBundle.h:
  • platform/network/curl/MultipartHandle.h:
  • platform/network/curl/ResourceError.h:
  • platform/network/curl/ResourceHandleCurlDelegate.cpp:

(WebCore::ResourceHandleCurlDelegate::createCurlRequest):
(WebCore::ResourceHandleCurlDelegate::curlDidReceiveResponse):
(WebCore::ResourceHandleCurlDelegate::curlDidReceiveBuffer):
(WebCore::ResourceHandleCurlDelegate::curlDidComplete):
(WebCore::ResourceHandleCurlDelegate::curlDidFailWithError):

  • platform/network/curl/ResourceRequest.h:

(WebCore::ResourceRequest::ResourceRequest):
(WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):
(WebCore::ResourceRequest::cfURLRequest const):
(WebCore::ResourceRequest::httpPipeliningEnabled):
(WebCore::ResourceRequest::setHTTPPipeliningEnabled):
(WebCore::ResourceRequest::doUpdatePlatformRequest):
(WebCore::ResourceRequest::doUpdateResourceRequest):
(WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
(WebCore::ResourceRequest::doUpdateResourceHTTPBody):
(WebCore::ResourceRequest::doPlatformSetAsIsolatedCopy):

  • platform/network/curl/ResourceResponseCurl.cpp:

(WebCore::ResourceResponse::isAppendableHeader):
(WebCore::ResourceResponse::ResourceResponse):

Source/WebKitLegacy/win:

  • WebCache.cpp:

(WebCache::cacheFolder):
(WebCache::setCacheFolder):

  • WebView.cpp:

(WebView::setCacheModel):

Location:
trunk/Source
Files:
26 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r223749 r223752  
     12017-10-20  Basuke Suzuki  <Basuke.Suzuki@sony.com>
     2
     3        [Curl] Clean up old style code in old curl files.
     4        https://bugs.webkit.org/show_bug.cgi?id=178569
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        * platform/network/curl/AuthenticationChallenge.h:
     9        * platform/network/curl/CertificateInfo.h:
     10        * platform/network/curl/CookieJarCurl.h:
     11        * platform/network/curl/CurlCacheEntry.h:
     12        * platform/network/curl/CurlCacheManager.cpp:
     13        (WebCore::CurlCacheManager::singleton):
     14        (WebCore::CurlCacheManager::getInstance): Deleted.
     15        * platform/network/curl/CurlCacheManager.h:
     16        * platform/network/curl/CurlContext.cpp:
     17        (WebCore::CurlContext::singleton):
     18        * platform/network/curl/CurlContext.h:
     19        (WebCore::CurlContext::singleton): Deleted.
     20        * platform/network/curl/CurlJobManager.cpp:
     21        (WebCore::CurlJobManager::singleton):
     22        * platform/network/curl/CurlJobManager.h:
     23        (WebCore::CurlJobManager::singleton): Deleted.
     24        * platform/network/curl/CurlRequest.cpp:
     25        (WebCore::CurlRequest::setupTransfer):
     26        * platform/network/curl/CurlRequest.h:
     27        * platform/network/curl/CurlRequestDelegate.h:
     28        * platform/network/curl/CurlResponse.h:
     29        (WebCore::CurlResponse::isolatedCopy const):
     30        * platform/network/curl/CurlSSLHandle.h:
     31        * platform/network/curl/CurlSSLVerifier.h:
     32        * platform/network/curl/DownloadBundle.h:
     33        * platform/network/curl/MultipartHandle.h:
     34        * platform/network/curl/ResourceError.h:
     35        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
     36        (WebCore::ResourceHandleCurlDelegate::createCurlRequest):
     37        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveResponse):
     38        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveBuffer):
     39        (WebCore::ResourceHandleCurlDelegate::curlDidComplete):
     40        (WebCore::ResourceHandleCurlDelegate::curlDidFailWithError):
     41        * platform/network/curl/ResourceRequest.h:
     42        (WebCore::ResourceRequest::ResourceRequest):
     43        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):
     44        (WebCore::ResourceRequest::cfURLRequest const):
     45        (WebCore::ResourceRequest::httpPipeliningEnabled):
     46        (WebCore::ResourceRequest::setHTTPPipeliningEnabled):
     47        (WebCore::ResourceRequest::doUpdatePlatformRequest):
     48        (WebCore::ResourceRequest::doUpdateResourceRequest):
     49        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
     50        (WebCore::ResourceRequest::doUpdateResourceHTTPBody):
     51        (WebCore::ResourceRequest::doPlatformSetAsIsolatedCopy):
     52        * platform/network/curl/ResourceResponseCurl.cpp:
     53        (WebCore::ResourceResponse::isAppendableHeader):
     54        (WebCore::ResourceResponse::ResourceResponse):
     55
    1562017-10-20  Frederic Wang  <fwang@igalia.com>
    257
  • trunk/Source/WebCore/platform/network/curl/AuthenticationChallenge.h

    r222521 r223752  
    2424 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2525 */
    26 #ifndef AuthenticationChallenge_h
    27 #define AuthenticationChallenge_h
     26
     27#pragma once
    2828
    2929#include "AuthenticationChallengeBase.h"
     
    5656};
    5757
    58 }
    59 
    60 #endif
     58} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CertificateInfo.h

    r181317 r223752  
    2424 */
    2525
    26 #ifndef CertificateInfo_h
    27 #define CertificateInfo_h
     26#pragma once
    2827
    2928#include "NotImplemented.h"
     
    3837};
    3938
    40 }
    41 
    42 #endif
     39} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CookieJarCurl.h

    r223550 r223752  
    5454};
    5555
    56 }
     56} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CurlCacheEntry.h

    r222113 r223752  
    2525 */
    2626
    27 #ifndef CurlCacheEntry_h
    28 #define CurlCacheEntry_h
     27#pragma once
    2928
    3029#include "FileSystem.h"
     
    9897};
    9998
    100 }
    101 
    102 #endif // CurlCacheEntry_h
     99} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CurlCacheManager.cpp

    r220939 r223752  
    3838#include "ResourceRequest.h"
    3939#include <wtf/HashMap.h>
     40#include <wtf/NeverDestroyed.h>
    4041#include <wtf/text/CString.h>
    4142
     
    4445namespace WebCore {
    4546
    46 CurlCacheManager& CurlCacheManager::getInstance()
    47 {
    48     static CurlCacheManager instance;
    49     return instance;
     47CurlCacheManager& CurlCacheManager::singleton()
     48{
     49    static NeverDestroyed<CurlCacheManager> sharedInstance;
     50    return sharedInstance;
    5051}
    5152
  • trunk/Source/WebCore/platform/network/curl/CurlCacheManager.h

    r177080 r223752  
    2525 */
    2626
    27 #ifndef CurlCacheManager_h
    28 #define CurlCacheManager_h
     27#pragma once
    2928
    3029#include "CurlCacheEntry.h"
     
    3837
    3938class CurlCacheManager {
    40 
     39    friend NeverDestroyed<CurlCacheManager>;
    4140public:
    42     static CurlCacheManager& getInstance();
     41    static CurlCacheManager& singleton();
    4342
    4443    void setCacheDirectory(const String&);
     
    8180};
    8281
    83 }
    84 
    85 #endif // CurlCacheManager_h
     82} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CurlContext.cpp

    r222828 r223752  
    3232#include <NetworkLoadMetrics.h>
    3333#include <wtf/MainThread.h>
     34#include <wtf/NeverDestroyed.h>
    3435#include <wtf/text/CString.h>
    3536
     
    4041#endif
    4142
    42 using namespace WebCore;
    43 
    4443namespace WebCore {
    4544
     
    7776
    7877// CurlContext -------------------------------------------------------------------
     78
     79CurlContext& CurlContext::singleton()
     80{
     81    static NeverDestroyed<CurlContext> sharedInstance;
     82    return sharedInstance;
     83}
    7984
    8085CurlContext::CurlContext()
  • trunk/Source/WebCore/platform/network/curl/CurlContext.h

    r222828 r223752  
    9393class CurlContext : public CurlGlobal {
    9494    WTF_MAKE_NONCOPYABLE(CurlContext);
    95 
     95    friend NeverDestroyed<CurlContext>;
    9696public:
    9797    struct ProxyInfo {
     
    105105    };
    106106
    107     static CurlContext& singleton()
    108     {
    109         static CurlContext shared;
    110         return shared;
    111     }
     107    static CurlContext& singleton();
    112108
    113109    virtual ~CurlContext();
     
    142138    CurlContext();
    143139    void initCookieSession();
    144 
    145140
    146141#ifndef NDEBUG
     
    297292};
    298293
    299 }
     294} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CurlJobManager.cpp

    r222508 r223752  
    3131#if USE(CURL)
    3232
     33#include <wtf/NeverDestroyed.h>
     34
    3335namespace WebCore {
    3436
     
    7779    HashMap<CURL*, CurlJobClient*> m_activeJobs;
    7880};
     81
     82CurlJobManager& CurlJobManager::singleton()
     83{
     84    static NeverDestroyed<CurlJobManager> sharedInstance;
     85    return sharedInstance;
     86}
    7987
    8088bool CurlJobManager::add(CurlJobClient* client)
  • trunk/Source/WebCore/platform/network/curl/CurlJobManager.h

    r222508 r223752  
    5252class CurlJobManager {
    5353    WTF_MAKE_NONCOPYABLE(CurlJobManager);
     54    friend NeverDestroyed<CurlJobManager>;
    5455public:
    55     static CurlJobManager& singleton()
    56     {
    57         static CurlJobManager shared;
    58         return shared;
    59     }
     56    static CurlJobManager& singleton();
    6057
    61     CurlJobManager() = default;
    6258    ~CurlJobManager() { stopThread(); }
    6359
     
    6864
    6965private:
     66    CurlJobManager() = default;
     67
    7068    void startThreadIfNeeded();
    7169    void stopThreadIfNoMoreJobRunning();
     
    8583};
    8684
    87 }
     85} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp

    r223681 r223752  
    153153    m_curlHandle->appendRequestHeaders(m_request.httpHeaderFields());
    154154
    155     auto method = m_request.httpMethod();
     155    const auto& method = m_request.httpMethod();
    156156    if (method == "GET")
    157157        m_curlHandle->enableHttpGetRequest();
  • trunk/Source/WebCore/platform/network/curl/CurlRequest.h

    r223728 r223752  
    158158};
    159159
    160 }
     160} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CurlRequestDelegate.h

    r222665 r223752  
    4242};
    4343
    44 }
     44} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CurlResponse.h

    r222521 r223752  
    4242        copy.expectedContentLength = expectedContentLength;
    4343
    44         for (auto header : headers)
     44        for (const auto& header : headers)
    4545            copy.headers.append(header.isolatedCopy());
    4646
     
    6060};
    6161
    62 }
     62} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CurlSSLHandle.h

    r222248 r223752  
    6464};
    6565
    66 
    67 }
     66} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/CurlSSLVerifier.h

    r222248 r223752  
    6868    SSLCertificateFlags convertToSSLCertificateFlags(const unsigned&);
    6969
    70     CurlHandle* m_curlHandle { nullptr };
     70    CurlHandle* m_curlHandle { };
    7171    String m_hostName;
    7272    int m_sslErrors { 0 };
    7373};
    7474
    75 }
     75} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/DownloadBundle.h

    r222113 r223752  
    2424 */
    2525
    26 #ifndef DownloadBundle_h
    27 #define DownloadBundle_h
     26#pragma once
    2827
    2928#include <wtf/Forward.h>
     
    3837} // namespace DownloadBundle
    3938} // namespace WebCore
    40 
    41 #endif // DownloadBundle_h
  • trunk/Source/WebCore/platform/network/curl/MultipartHandle.h

    r223728 r223752  
    2424 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2525 */
    26 #ifndef MultipartHandle_h
    27 #define MultipartHandle_h
     26
     27#pragma once
    2828
    2929#include "HTTPHeaderMap.h"
     
    8080
    8181} // namespace WebCore
    82 #endif // MultipartHandle_h
  • trunk/Source/WebCore/platform/network/curl/ResourceError.h

    r222187 r223752  
    6262};
    6363
    64 }
    65 
     64} // namespace WebCore
  • trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp

    r223408 r223752  
    157157    bool hasCacheHeaders = request.httpHeaderFields().contains(HTTPHeaderName::IfModifiedSince) || request.httpHeaderFields().contains(HTTPHeaderName::IfNoneMatch);
    158158    if (!hasCacheHeaders) {
    159         auto& cache = CurlCacheManager::getInstance();
     159        auto& cache = CurlCacheManager::singleton();
    160160        URL cacheUrl = request.url();
    161161        cacheUrl.removeFragmentIdentifier();
     
    164164            cache.addCacheEntryClient(cacheUrl, m_handle);
    165165
    166             for (auto entry : cache.requestHeaders(cacheUrl))
     166            for (const auto& entry : cache.requestHeaders(cacheUrl))
    167167                request.addHTTPHeaderField(entry.key, entry.value);
    168168
     
    219219            cacheUrl.removeFragmentIdentifier();
    220220
    221             if (CurlCacheManager::getInstance().getCachedResponse(cacheUrl, response())) {
     221            if (CurlCacheManager::singleton().getCachedResponse(cacheUrl, response())) {
    222222                if (m_addedCacheValidationHeaders) {
    223223                    response().setHTTPStatusCode(200);
     
    227227        }
    228228
    229         CurlCacheManager::getInstance().didReceiveResponse(*m_handle, response());
     229        CurlCacheManager::singleton().didReceiveResponse(*m_handle, response());
    230230
    231231        auto protectedThis = makeRef(*m_handle);
     
    244244        m_multipartHandle->contentReceived(buffer->data(), buffer->size());
    245245    else if (m_handle->client()) {
    246         CurlCacheManager::getInstance().didReceiveData(*m_handle, buffer->data(), buffer->size());
     246        CurlCacheManager::singleton().didReceiveData(*m_handle, buffer->data(), buffer->size());
    247247        m_handle->client()->didReceiveBuffer(m_handle, WTFMove(buffer), buffer->size());
    248248    }
     
    263263
    264264    if (m_handle->client()) {
    265         CurlCacheManager::getInstance().didFinishLoading(*m_handle);
     265        CurlCacheManager::singleton().didFinishLoading(*m_handle);
    266266        m_handle->client()->didFinishLoading(m_handle);
    267267    }
     
    275275        return;
    276276
    277     CurlCacheManager::getInstance().didFail(*m_handle);
     277    CurlCacheManager::singleton().didFail(*m_handle);
    278278    m_handle->client()->didFail(m_handle, resourceError);
    279279}
  • trunk/Source/WebCore/platform/network/curl/ResourceRequest.h

    r201623 r223752  
    2525 */
    2626
    27 #ifndef ResourceRequest_h
    28 #define ResourceRequest_h
     27#pragma once
    2928
    3029#include "ResourceRequestBase.h"
     
    3433namespace WebCore {
    3534
    36     class ResourceRequest : public ResourceRequestBase {
    37     public:
    38         ResourceRequest(const String& url)
    39             : ResourceRequestBase(URL(ParsedURLString, url), UseProtocolCachePolicy)
    40         {
    41         }
     35class ResourceRequest : public ResourceRequestBase {
     36public:
     37    ResourceRequest(const String& url)
     38        : ResourceRequestBase(URL(ParsedURLString, url), UseProtocolCachePolicy)
     39    {
     40    }
    4241
    43         ResourceRequest(const URL& url)
    44             : ResourceRequestBase(url, UseProtocolCachePolicy)
    45         {
    46         }
     42    ResourceRequest(const URL& url)
     43        : ResourceRequestBase(url, UseProtocolCachePolicy)
     44    {
     45    }
    4746
    48         ResourceRequest(const URL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy)
    49             : ResourceRequestBase(url, policy)
    50         {
    51             setHTTPReferrer(referrer);
    52         }
     47    ResourceRequest(const URL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy)
     48        : ResourceRequestBase(url, policy)
     49    {
     50        setHTTPReferrer(referrer);
     51    }
    5352
    54         ResourceRequest()
    55             : ResourceRequestBase(URL(), UseProtocolCachePolicy)
    56         {
    57         }
     53    ResourceRequest()
     54        : ResourceRequestBase(URL(), UseProtocolCachePolicy)
     55    {
     56    }
    5857
    59         ResourceRequest(CFURLRequestRef)
    60             : ResourceRequestBase()
    61         {
    62         }
     58    ResourceRequest(CFURLRequestRef)
     59        : ResourceRequestBase()
     60    {
     61    }
    6362
    64         void updateFromDelegatePreservingOldProperties(const ResourceRequest& delegateProvidedRequest) { *this = delegateProvidedRequest; }
     63    void updateFromDelegatePreservingOldProperties(const ResourceRequest& delegateProvidedRequest) { *this = delegateProvidedRequest; }
    6564
    66         // Needed for compatibility.
    67         CFURLRequestRef cfURLRequest(HTTPBodyUpdatePolicy) const { return 0; }
     65    // Needed for compatibility.
     66    CFURLRequestRef cfURLRequest(HTTPBodyUpdatePolicy) const { return 0; }
    6867
    69         // The following two stubs are for compatibility with CFNetwork, and are not used.
    70         static bool httpPipeliningEnabled() { return false; }
    71         static void setHTTPPipeliningEnabled(bool) { }
     68    // The following two stubs are for compatibility with CFNetwork, and are not used.
     69    static bool httpPipeliningEnabled() { return false; }
     70    static void setHTTPPipeliningEnabled(bool) { }
    7271
    73     private:
    74         friend class ResourceRequestBase;
     72private:
     73    friend class ResourceRequestBase;
    7574
    76         void doUpdatePlatformRequest() { }
    77         void doUpdateResourceRequest() { }
    78         void doUpdatePlatformHTTPBody() { }
    79         void doUpdateResourceHTTPBody() { }
     75    void doUpdatePlatformRequest() { }
     76    void doUpdateResourceRequest() { }
     77    void doUpdatePlatformHTTPBody() { }
     78    void doUpdateResourceHTTPBody() { }
    8079
    81         void doPlatformSetAsIsolatedCopy(const ResourceRequest&) { }
     80    void doPlatformSetAsIsolatedCopy(const ResourceRequest&) { }
    8281
    83         static bool s_httpPipeliningEnabled;
    84     };
     82    static bool s_httpPipeliningEnabled;
     83};
    8584
    8685} // namespace WebCore
    87 
    88 #endif // ResourceRequest_h
  • trunk/Source/WebCore/platform/network/curl/ResourceResponseCurl.cpp

    r222756 r223752  
    6969        return true;
    7070
    71     for (auto& header : appendableHeaders) {
     71    for (const auto& header : appendableHeaders) {
    7272        if (equalIgnoringASCIICase(key, header))
    7373            return true;
     
    8282    setHTTPStatusCode(response.statusCode);
    8383
    84     for (auto header : response.headers)
     84    for (const auto& header : response.headers)
    8585        appendHTTPHeaderField(header);
    8686
  • trunk/Source/WebKitLegacy/win/ChangeLog

    r223720 r223752  
     12017-10-20  Basuke Suzuki  <Basuke.Suzuki@sony.com>
     2
     3        [Curl] Clean up old style code in old curl files.
     4        https://bugs.webkit.org/show_bug.cgi?id=178569
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        * WebCache.cpp:
     9        (WebCache::cacheFolder):
     10        (WebCache::setCacheFolder):
     11        * WebView.cpp:
     12        (WebView::setCacheModel):
     13
    1142017-10-19  Sam Weinig  <sam@webkit.org>
    215
  • trunk/Source/WebKitLegacy/win/WebCache.cpp

    r207231 r223752  
    246246{
    247247#if USE(CURL)
    248     String cacheFolder = WebCore::CurlCacheManager::getInstance().cacheDirectory();
     248    String cacheFolder = WebCore::CurlCacheManager::singleton().cacheDirectory();
    249249    *location = WebCore::BString(cacheFolder).release();
    250250    return S_OK;
     
    262262#if USE(CURL)
    263263    String cacheFolder(location, SysStringLen(location));
    264     WebCore::CurlCacheManager::getInstance().setCacheDirectory(cacheFolder);
     264    WebCore::CurlCacheManager::singleton().setCacheDirectory(cacheFolder);
    265265    return S_OK;
    266266#elif USE(CFURLCONNECTION)
  • trunk/Source/WebKitLegacy/win/WebView.cpp

    r223720 r223752  
    514514    CFIndex cacheDiskCapacity = 0;
    515515#elif USE(CURL)
    516     cacheDirectory = CurlCacheManager::getInstance().cacheDirectory();
     516    cacheDirectory = CurlCacheManager::singleton().cacheDirectory();
    517517    long cacheMemoryCapacity = 0;
    518518    long cacheDiskCapacity = 0;
     
    685685    CFURLCacheSetDiskCapacity(cfurlCache.get(), cacheDiskCapacity);
    686686#elif USE(CURL)
    687     CurlCacheManager::getInstance().setStorageSizeLimit(cacheDiskCapacity);
     687    CurlCacheManager::singleton().setStorageSizeLimit(cacheDiskCapacity);
    688688#endif
    689689
Note: See TracChangeset for help on using the changeset viewer.